11

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

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

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

4

4 回答 4

21

我知道这是一篇旧帖子,但这是谷歌上弹出的内容,我确实有一个很好的替代当前最佳答案的方法(不包括期望值条件)

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

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

于 2018-11-02T04:48:48.120 回答
11

您按如下方式遍历您的类:

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

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

于 2013-10-16T06:12:55.983 回答
4

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

像这样的东西:

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

顺便说一句,BCL 已经包含一些对这类任务有用的类:

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

但也许您出于某种原因需要按照您的方式进行操作:)

于 2013-10-16T06:12:35.877 回答
1

试试这个基本的迭代:

Node tmp = head;
while (tmp != null)
{
    //do your checking...
    tmp = tmp.next;
}
于 2013-10-16T06:13:08.220 回答