首页 > 解决方案 > 遇到了一些关于如何搜索链接列表的代码,并想了解这段代码

问题描述

有人可以向我解释 prev=temp 和最后两行代码吗?谢谢你

node *temp ,*prev;
temp = head;
while(temp != NULL && temp->value <= value) {
    prev = temp;
    temp = temp->next;
}
newNode->next = temp;
prev->next = newNode;

标签: clinked-list

解决方案


prev 和 temp 是指向列表中两个相邻节点的指针。此代码将 NewNode 插入到 prev 和 temp 之间的列表中:

newNode->next = temp;   //  newNode goes before temp 
prev->next = newNode;   //  ... and after prev

请注意 temp 可以为 NULL。还行吧。这只是意味着我们将 newNode 放在列表的末尾。

另请注意,代码中存在错误。如果 newNode 应该放在列表的开头,那么 prev 将是未定义的。这种情况的代码是:

newNode->next = temp;   //  newNode goes before temp
head = newNode;         //  and there is no previous node

这是更正后的代码:

node *temp ,*prev;
prev = NULL;  // no previous at this point
temp = head;  // start of list
while(temp != NULL && temp->value <= value) {
    prev = temp;  // save pointer to previous node
    temp = temp->next;  // advance through list
}
newNode->next = temp;
if (prev == NULL) 
    head = newNode;
else 
    prev->next = newNode;

推荐阅读