Односвязный список на C#. Вставить первый элемент в конец
Формулировка задачи:
Добрый день всем! Заранее извиняюсь если вопрос нубский.
Стоит такая задача: есть односвязный список из произвольного количества элементов. Нужно написать метод, который в качестве параметра принимает этот список, ставит первый элемент вконец и возвращает ссылку на новый первый элемент.
Тоесть: дано A - > B - > C - > D - > нужно вернуть B - > C - > D - > A - > для произвольного кол-ва элементов списка.
Вот код:
И вот сама функция Sort():
Ну и еще хотелось бы знать решения такой задачи в общем виде:
Задача 2: Инвертирвать;
Задача 3: Вставить новый элемент всередину;
Заранее всем спасибо за ответы!
class ListNode
{
public ListNode Next { get; set; }
public string Name { get; set; }
public ListNode(string n)
{
Name = n;
}
public override string ToString()
{
return String.Format("[Node: {0}] ——> {1}", this.Name, this.Next);
}
}class Program
{
static void Main(string[] args)
{
ListNode list = new ListNode("A");
list.Next = new ListNode("B");
list.Next.Next = new ListNode("C");
list.Next.Next.Next = new ListNode("D");
Console.WriteLine(list);
Console.WriteLine(Sort(list));
}
static ListNode Sort(ListNode node)
{
node = node.Next;
// "B" с хвостом вначало втулил, но
// дальше я хз как втулить в конец "А"
return node;
}
}
Помню задачу немного похожую решал еще в школе на алгебре:
Вичислить значение выражения:
Так оно решалось составлением уравнения
Может тут нечто похожее можно придумать
Решение задачи: «Односвязный список на C#. Вставить первый элемент в конец»
textual
Листинг программы
static ListNode FirstToEnd(ListNode list)
{
if (list.Next == null)
return list;
ListNode result = list.Next, node;
list.Next = null;
for (node = result; node.Next != null; node = node.Next) ;
node.Next = list;
return result;
}