I have looked around and I can't really find an answer I can understand or it doesn't apply to me. I have this class:
class Node
{
public int value;
public Node next;
}
And I have a member variable called head
which is the head of the single linked list. Now I am trying to iterate through the different nodes of the linked list to search for a specific value
. I know if I do it manually then I would do head.next.next.next.next.value
if I want the value
of the 5th node. This would quickly get tedious for a linked list of very large size so my question is how can I create some loop to iterate through this so that I can check the value
variable in each node of the linked list?
I know this is an old post, but this is what is popping up on google, and I do have a good alternative to the current best answer (not including the desired value condition)
LinkedListNode<ChunkObject> list = new LinkedListNode<ChunkObject>();
for(LinkedListNode<Object> node=list.First; node != null; node=node.Next){
//do stuff
}
This version obviously uses a for loop and moves the variable declaration and increment to one line allowing you to condense and beautify your code.
For this kind of list, you usually keep a reference to the current node (which starts with the head), and after each iteration, you change the value of that reference to the next
node. When currentNode
becomes null
, you have reached the end of the list, as the last element doesn't have a next element.
Something like this:
Node currentNode = head;
while (currentNode != null) {
// do stuff with currentNode.value
currentNode = currentNode.Next;
}
By the way, the BCL already contains some useful classes for this sort of task:
List<T>
, which internally uses arrays to store elements and provides random access to themLinkedList<T>
, which uses the same principle as your custom class.But maybe you need to do it the way you do for some reason :)
You iterate through your class as follows:
var currentNode = head;
while ((currentNode != null) && (currentNode.Value != desiredValue))
currentNode = currentNode.next;
When the while
loop completes, currentNode will be null
or contain a node with the desired value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With