我正在制作一个单一链接列表。在创建自己的链表时,我对在自定义链表中打印节点集感到困惑。
我想知道,一个单一链接的列表是否以堆叠的LIFO方式显示其集合?
下面是我自己的LinkedList AND节点是A类,任何人都可以告诉我,Singular LinkedList以Lifo Manner打印集合。
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;
}
}
}
答案 0 :(得分:2)
如果您指的是LinkedList<T>
,答案取决于您添加新成员的方式。
如果您想让链接列表在LIFO中迭代,您可以通过始终使用AddFirst添加,并RemoveFirst删除来完成此操作。这将导致它的行为非常像堆栈。
然而,关于LinkedList<T>
的好处是你可以添加任何地方inside of the list作为O(1)操作。
编辑:
如果您希望将其设为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;
}
}
}
答案 1 :(得分:0)
您在列表的开头添加节点(请注意您始终如何将node.Next
设置到列表的开头。)
然后你从头部(插入的最后一个元素)到尾部迭代。
如果要按FIFO顺序迭代,则应执行以下操作:
header
的头部)。tail.Next
设置为新节点,然后将tail
设置为指向新节点。你的另一个选择是,不是保持对尾部的引用,而是每次都在列表中进行迭代。但这需要权衡需要通过n-1
元素每次添加n
元素,这意味着添加许多元素是O(n^2)
操作。我不建议这样做,但如果您正在学习基础知识并且您不确定尾部引用操作,那么它可能会很好。但是,在生产代码中,您应始终为链接列表提供头部和尾部引用。