2010-10-05 1 views
1

Я работал над уникальным списком. При создании моего собственного связанного списка я запутался в печати коллекции узлов в моем пользовательском связанном списке.Является ли ссылка LinkedList единственным результатом в LIFO?

Я хочу знать, содержит ли связанный друг с другом список, отображающий его коллекцию в виде LIFO, как стек?

ниже - мой собственный LinkedList И узел - это класс, который может рассказать мне. Имеет ли Singular LinkedList печать коллекции в Lifo Maner.

class MYlinklist 
{ 
    Node header; 

    public void Add(int a) 
    { 
     Node n = new Node(); 
     n.element = a; 
     n.Next = header; 
     header = n; 
    } 

    public void Print() 
    { 
     Node n = new Node(); 
     n = header; 
     while (n != null) 
     { 
      Console.WriteLine(n.element.ToString()); 
      n = n.Next; 
     } 
    } 
} 

ответ

2

Если вы имеете в виду LinkedList<T>, ответ зависит от того, как вы добавляете новых членов.

Если вы хотите, чтобы связанный список повторялся в LIFO, вы можете сделать это, всегда используя AddFirst для добавления и RemoveFirst для удаления. Это приведет к тому, что он будет очень похож на стек.

Хорошая вещь о LinkedList<T>, однако, заключается в том, что вы можете добавить где-нибудь inside of the list в качестве операции O (1).


Edit:

Если вы хотите, чтобы это было FIFO вместо этого, вам нужно изменить, как добавлять узлы, и добавить их в конец списка, а не начало:

class MyLinkedList 
{ 
    Node header; 
    Node last; 

    public void Add(int a) 
    { 
     Node n = new Node(); 
     n.element = a; 
     n.Next = null; // We'll put this at the end... 
     if (last == null) 
     { 
      header = n; 
      last = n; 
     } 
     else 
     { 
      last.Next = n; 
      last = n; 
     } 
    } 

    public void Print() 
    { 
     Node n = new Node(); 
     n = header; 
     while (n != null) 
     { 
      Console.WriteLine(n.element.ToString()); 
      n = n.Next; 
     } 
    } 
} 
+0

@Reed: Я создаю Custom LinkedList, я не имею в виду его .net LinkedList! –

+0

I waz Создание собственного LinkedList N, когда я waz Iterating throught My customLinked List Я узнал, что это результат отображения в Lifo MANNER –

+0

@Pro_Zeck: Теперь ваш способ печати печатает LIFO. –

0

Вы добавляете узлы во главе списка (обратите внимание, как вы всегда устанавливаете node.Next в начало списка).

Затем вы итерируете из головы (которая является последним вставленным элементом) в хвост.

Если вы хотите перебрать в порядке их поступления, вы должны сделать следующее:

  1. сохранить ссылку на хвост списка (а также головы, которые вы положили в header).
  2. Когда вы добавляете узел, установите tail.Next на новый узел, а затем установите tail, чтобы указать на новый узел.
  3. Ваша итерационная функция не может быть изменена.

Другой вариант, вместо сохранения ссылки на хвост, просто выполняет итерацию по списку каждый раз. Но это связано с компромиссом, требующим пройти через элементы n-1, чтобы каждый раз добавлять n-й элемент, что означает, что добавление многих элементов - это операция O(n^2). Я бы не рекомендовал делать это, но это может быть хорошо для начала, если вы изучаете основы, и вы не уверены в манипуляциях с хвостом. В производственном коде, однако, вы всегда должны иметь ссылку на голову и хвост для связанных списков.

Смежные вопросы