Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate through Linked List

Tags:

c#

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?

like image 991
Harris Calvin Avatar asked Oct 16 '13 06:10

Harris Calvin


Video Answer


3 Answers

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.

like image 117
Andrew900460 Avatar answered Oct 11 '22 01:10

Andrew900460


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 them
  • LinkedList<T>, which uses the same principle as your custom class.

But maybe you need to do it the way you do for some reason :)

like image 36
Botz3000 Avatar answered Oct 11 '22 01:10

Botz3000


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.

like image 45
William Avatar answered Oct 11 '22 02:10

William