因此,我非常了解迭代链表,并获得列表中的下一个节点。现在我试图向另一个方向前进,但我很快意识到它并不像看起来那么容易。与可以向前和向后迭代的数组不同。我似乎很难过。
所以,如果我有一个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;
}
}
答案 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;
}