获取给定链表中节点地址的节点的地址

时间:2014-03-26 02:16:48

标签: c++

因此,我非常了解迭代链表,并获得列表中的下一个节点。现在我试图向另一个方向前进,但我很快意识到它并不像看起来那么容易。与可以向前和向后迭代的数组不同。我似乎很难过。

所以,如果我有一个1的列表 - > 2 - > 3 - > 4 - > NULL如果给定节点3的位置,我将如何获取节点2的地址?

我开始乱用下面的代码,将所有项目返回到节点3.我只是不知道如何获得前一个节点?顺便说一句searchList()如果给它提供node->数据值,则返回节点的地址。使用上面的列表searchList(3)将返回以3作为其数据成员的节点的地址。

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;
    }
}

2 个答案:

答案 0 :(得分:1)

使用像您这样的单链接列表,如果只给出节点3的地址,则无法获取节点2的地址。您必须从头节点开始并向前迭代直到达到3 ,跟踪前一个节点(在这种情况下为2)。或者,您可以使用包含“node * previous;”的双向链接列表。构件。

答案 1 :(得分:0)

听起来你想获得一个节点的前一个节点,该节点的值是作为输入给你的。这应该适合你:

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;
}