2

假设在我的链表类中,我保留了一个指向链表头部的指针......

当我编写此代码时,在其中一个成员函数中......

Node *cur = head;
cur = cur->next;

为什么头不改变head->next

如果我写cur = NULL;它会让人头疼null吗?

4

3 回答 3

7

我假设这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
于 2013-01-10T22:51:23.133 回答
2

如果你写:

Node *cur = head;
cur = NULL;

然后cur将指向任何内容,并且不会发生任何事情head

如果你写:

Node *cur = head;
cur = cur->next;
cur = NULL;

同样的事情会发生(cur将指向任何东西,也不会发生任何事情head),除非headwas NULL,在这种情况下,你会崩溃cur = cur->next;

如果您尝试通过指针设置head->nextNULL可以cur使用以下方法进行设置:

Node *cur = head;
cur->next = NULL;

我可以看到您的困惑来自指针的性质。当您说Node *cur = head;您正在创建一个Node指向与head. 如果您cur通过 设置为其他内容cur = NULL,那么您只是更改指向 的内容,而不是它所cur指向的内容的值,因此不会受到影响head

当您改为使用时,您正在cur->next = NULL修改指向next的成员。这也是what指向的成员,因此变化也反映在.curnextheadhead->next

于 2013-01-10T22:48:10.370 回答
1

cur 是指针,cur = cur->next; 只是在其他地方提出当前观点,它为什么要换头?

于 2013-01-10T22:49:24.523 回答