【发布时间】:2021-02-01 06:45:10
【问题描述】:
我使用了一个临时节点'nextnode'指向head或cur的下一个节点:
SinglyLinkedListNode* removeDuplicates(SinglyLinkedListNode* head) {
if ( head == NULL ) return NULL;
SinglyLinkedListNode *nextnode = head->next;
while ( nextnode != NULL && head->data == nextnode->data ) {
nextnode = nextnode->next;
}
head->next = removeDuplicates( nextnode );
return head;
}
这段代码可以正常工作......但是如果我改变了
head->next = removeDuplicates( nextnode );
到
head->next = removeDuplicates( head->next);
代码输出与输入相同的列表。
但是如果我在所有地方删除nextnode 并使用head->next 代替nextnode,代码就可以正常工作!
实际发生了什么,使它起作用?我错过了什么?
当使用head->next 和nextnode 时,这段代码会发生什么?我只是想了解这在内存分配中是如何工作的,以便更好地理解递归。
【问题讨论】:
-
只需将它画在一张纸上,跟踪
nextnode和head->next在执行过程中的变化。以列表 [1]->[1]->[2]->[2]->[3] 为例。逐步展示您为遵循这些修改所做的工作。 -
我只知道它在removeduplicate(head->next) 的情况下有效...我不知道它在removeduplicates(nextnode) 的情况下如何工作...在后一种情况下,值头,不改变?或者它是否会改变 nextnode 的值,如果然后它是否转到下一个节点 acc to head->next 或 nextnode->next
-
在c++中,更喜欢使用
nullptr -
哦,好吧!这是有道理的..谢谢!
标签: c++ recursion data-structures linked-list singly-linked-list