добавить к программе Метод Extend, добавляющий к списку копию другого списка. c#
using System;(3 лаб 2 задание -)
using System.Collections.Generic;
using System.Text;
namespace MyLinkedList
{//2.1. Метод Extend, добавляющий к списку копию другого списка.
public class ListUnderflow : Exception { }
public class LinkedList // односвязный список
{
class Node
{
public double Value { get; set; }
public Node Next { get; set; }
public Node(double item)
{
Value = item;
Next = null;
}
}
Node head = null; // головной/первый элемент
Node tail = null; // последний/хвостовой элемент
int count; // количество элементов в списке
// добавление элемента в конец списка
public void Add(double item)
{
Node node = new Node(item);
if (head == null)
head = node;
else
tail.Next = node;
tail = node;
count++;
}
// добавление в начало
public void AppendFirst(double item)
{
Node node = new Node(item);
node.Next = head;
head = node;
if (count == 0)
tail = head;
count++;
}
// удаление элемента
public bool Remove(double item)
{
Node current = head; // текущий элемент
Node previous = null; // предыдущий элемент
while (current != null)
{
if (current.Value == item)
{
// Если узел в середине или в конце
if (previous != null)
{
// убираем узел current, теперь previous ссылается не на current,
// а на current.Next
previous.Next = current.Next;
// Если current.Next не установлен, значит, узел последний,
// изменяем переменную tail
if (current.Next == null)
tail = previous;
}
else
{
// если удаляется первый элемент
// переустанавливаем значение head
head = head.Next;
// если после удаления список пуст, сбрасываем tail
if (head == null)
tail = null;
}
count--;
return true;
}
previous = current;
current = current.Next;
}
return false;
}
// содержит ли список элемент
public bool Contains(double item)
{
Node current = head;
while (current != null)
{
if (current.Value == item)
return true;
current = current.Next;
}
return false;
}
// вывод элементов списка
public void PrintList()
{
if (head == null)
throw new ListUnderflow();
Node current = head;
while (current != null)
{
Console.Write(current.Value + " ");
current = current.Next;
}
Console.WriteLine();
}
// строковое представление списка
public override string ToString()
{
if (head == null)
throw new ListUnderflow();
StringBuilder PrintList = new StringBuilder();
Node current = head;
while (current != null)
{
PrintList.Append(current.Value + " ");
current = current.Next;
}
return PrintList.ToString();
}
}
class Program
{
static void Main(string[] args)
{
try
{
LinkedList list = new LinkedList();
// добавление элементов
list.Add(5);
list.Add(7);
list.Add(9);
list.Add(3);
// вывод элементов списка
Console.WriteLine("Список: {0}", list);
LinkedList list1 = new LinkedList();
// добавление элементов
list1.Add(3);
list1.Add(-3);
list1.Add(2);
list1.Add(1);
// вывод элементов списка
Console.WriteLine("Список: {0}", list1);
// или
// Console.Write("Список: ");
// list.PrintList();
// удаление элемента
Console.WriteLine("Введите элемент для удаления");
double x = Convert.ToDouble(Console.ReadLine());
if (list.Remove(x))
{
Console.WriteLine("Элемент {0} удален из списка", x);
Console.WriteLine("Список: {0}", list);
}
else Console.WriteLine("Элемент {0} в списке отсутствует", x);
// проверка наличия элемента
Console.WriteLine("Введите элемент для поиска");
x = Convert.ToDouble(Console.ReadLine());
if (list.Contains(x))
Console.WriteLine("Элемент есть в списке");
else
Console.WriteLine("Элемент в списке отсутствует");
// добавление элемента в начало
list.AppendFirst(4);
Console.WriteLine("Элемент 4 добавлен в начало списка");
Console.WriteLine("Список: {0}", list);
//Console.WriteLine("Список: {0}", list.Extend());
}
catch (ListUnderflow)
{
Console.WriteLine("Список пуст");
}
Console.ReadLine();
}
}
}
Answers & Comments
Ответ:
Метод добавления выглядит так:
public void Extend(LinkedList list)
{
Node current = list.head;
while(current != null)
{
Add(current.Value);
current = current.Next;
}
}
Использовать можно так: list.Extend(list1);
list и list1 уже созданные в программе списки.
В список list добавятся элементы из списка list1.