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

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

本文关键字:地址 节点 获取 链表      更新时间:2023-10-16

所以我对遍历链表以及获取链表中的下一个节点有了很好的理解。现在我试着往另一个方向走,但我很快意识到这并不像看起来那么容易。不像数组,你可以向前和向后迭代。我似乎被难住了。

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

我开始摆弄下面的代码,它返回节点3之前的所有项。我不知道怎么才能得到前一个节点?顺便说一下,如果给searchList()一个node->data值,它将返回节点的地址。使用上面的列表,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;
    }
}

对于像你这样的单链表,如果只给节点3的地址,则不可能获得节点2的地址。您必须从头节点开始并向前迭代直到到达3,并跟踪前一个节点(在本例中为2)。或者,您可以使用包含"node *previous;"成员的双链表。

听起来像是您想要获得其值作为输入给您的节点的前一个节点。这应该可以帮你完成:

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