如何遍历链表

时间:2013-10-16 06:09:47

标签: c#

我环顾四周,无法找到我能理解的答案,或者它不适用于我。我有这门课:

class Node
{
    public int value;
    public Node next;
}

我有一个名为head的成员变量,它是单个链表的头部。现在我试图遍历链表的不同节点以搜索特定的value。我知道如果我手动执行,那么如果我想要第5个节点的head.next.next.next.next.value,我会value。对于非常大的链表而言,这很快就会变得乏味,所以我的问题是如何创建一些循环来迭代这个,以便我可以检查链表的每个节点中的value变量?

4 个答案:

答案 0 :(得分:4)

按如下方式遍历您的课程:

var currentNode = head;
while ((currentNode != null) && (currentNode.Value != desiredValue))
   currentNode = currentNode.next;

while循环完成时,currentNode将为null或包含具有所需值的节点。

答案 1 :(得分:2)

对于这种类型的列表,通常会保留对当前节点(以头部开头)的引用,并在每次迭代后,将该引用的值更改为next节点。当currentNode变为null时,您已到达列表的末尾,因为最后一个元素没有下一个元素。

这样的事情:

Node currentNode = head;
while (currentNode != null) {
    // do stuff with currentNode.value
    currentNode = currentNode.Next;
}

顺便说一下,BCL已经为这类任务包含了一些有用的类:

  • List<T>,内部使用数组存储元素并提供对它们的随机访问
  • LinkedList<T>,它使用与您的自定义类相同的原则。

但也许你需要按照某种原因这样做:)

答案 2 :(得分:1)

尝试这个基本的迭代:

Node tmp = head;
while (tmp != null)
{
    //do your checking...
    tmp = tmp.next;
}

答案 3 :(得分:1)

我知道这是一篇过时的文章,但这是google上弹出的内容,对于目前的最佳答案,我确实有很好的选择(不包括所需的取值条件)

LinkedListNode<ChunkObject> list = new LinkedListNode<ChunkObject>();
for(LinkedListNode<Object> node=list.First; node != null; node=node.Next){
    //do stuff
}

此版本显然使用了for循环,并将变量声明和增量移动到一行,从而可以压缩和美化代码。