假设在我的链表类中,我保留了一个指向链表头部的指针......
当我编写此代码时,在其中一个成员函数中......
Node *cur = head;
cur = cur->next;
为什么头不改变head->next
?
如果我写cur = NULL
;它会让人头疼null
吗?
假设在我的链表类中,我保留了一个指向链表头部的指针......
当我编写此代码时,在其中一个成员函数中......
Node *cur = head;
cur = cur->next;
为什么头不改变head->next
?
如果我写cur = NULL
;它会让人头疼null
吗?
我假设这head
是一个Node *
. 在这种情况下,当您说cur = cur->next
您正在更改 wherecur
点时,但head
仍将指向列表的头部,因为您没有更改它指向的位置。
Cur----------|
|
V next
Head -----> Item 1--------->Item 2
cur = cur->next
产生以下结果:
Cur--------------------------|
|
next V
Head -----> Item 1--------->Item 2
如果你写:
Node *cur = head;
cur = NULL;
然后cur
将指向任何内容,并且不会发生任何事情head
。
如果你写:
Node *cur = head;
cur = cur->next;
cur = NULL;
同样的事情会发生(cur
将指向任何东西,也不会发生任何事情head
),除非head
was NULL
,在这种情况下,你会崩溃cur = cur->next;
如果您尝试通过指针设置head->next
,NULL
可以cur
使用以下方法进行设置:
Node *cur = head;
cur->next = NULL;
我可以看到您的困惑来自指针的性质。当您说Node *cur = head;
您正在创建一个Node
指向与head
. 如果您cur
通过 设置为其他内容cur = NULL
,那么您只是更改指向 的内容,而不是它所cur
指向的内容的值,因此不会受到影响head
。
当您改为使用时,您正在cur->next = NULL
修改指向next
的成员。这也是what指向的成员,因此变化也反映在.cur
next
head
head->next
cur 是指针,cur = cur->next; 只是在其他地方提出当前观点,它为什么要换头?