MrPilot
MrPilot

Reputation: 173

obtain the address of a node given a node address in a linked list

So I have a pretty good understanding of iterating through a linked list, and also obtaining the next node in the list. Now I trying to go in the other direction, but I soon realized its not as easy as it appears. Unlike an array where you can iterate forwards and backwards. I seem to be stumped.

So If I have a list of 1 -> 2 -> 3 -> 4 -> NULL How would I go about obtaining the address of node 2 given the location of node 3?

I started messing around with this code below which returns all items up to node 3. I just don't see how I can get that previous node? By the way searchList() returns the address of a node if you give it the node->data value. Using the list above searchList(3) returns the address of the node which has 3 as its data member.

struct node {
    int data;
    node* next;
};

void llclass::getPrevious() {
    node *stop = searchList(nodeItem),
         *start = head;

    while (start != stop) {
        cout << start->data << endl;
        start = start->next;
    }
}

Upvotes: 0

Views: 422

Answers (2)

DigitalEye
DigitalEye

Reputation: 1565

Sounds like you want to get the previous node of a node whose value is given as input to you. This should do that for you:

node* llclass::getPrevious(int item)
{
   node* previous = NULL;
   node* current = head;
   while(current)
   {
      if (current->data == item)
      {
          return previous;
      }
      else
      {
          previous = current;
          current = current->next;
      }
   }
   return NULL;
}

Upvotes: 0

Paul Lambert
Paul Lambert

Reputation: 420

With a singly-linked list like yours, it is not possible to obtain the address of node 2 if you're given only the address of node 3. You would have to start at the head node and iterate forward until reaching 3, keeping track of the previous node (2 in this case). Alternately, you could use a doubly-linked list that includes a "node *previous;" member.

Upvotes: 1

Related Questions