大可爱 发表于 2018-10-19 22:09:44

链表删除语句第二个看不懂

两个方法中,第二个为什么 要 进行q = p->next   ,感觉 多余,直接进行 p->next =q->next不行吗

claws0n 发表于 2018-10-19 22:52:20

                  p                   q
...... -----> [ x |   ] -----> [ x |   ] -----> [ x |   ] -----> ......
                                    待删除
                                 q = p->next   q->next
                                                             ^
                p->next = q->next ---------------|    //接过来啦~~

大可爱 发表于 2018-10-19 23:48:10

claws0n 发表于 2018-10-19 22:52
p                   q
...... -----> [ x |   ] -----> [ x |   ] -----> [ x |   ] ...

删掉节点就是要让那个节点不被任何指针指向,所以要free指向那个节点的指针,但是要给那个指针七个名字,所以有 q = p->next 。这样说对吗

claws0n 发表于 2018-10-19 23:53:46

大可爱 发表于 2018-10-19 23:48
删掉节点就是要让那个节点不被任何指针指向,所以要free指向那个节点的指针,但是要给那个指针七个名字, ...

不是。待删除的一定有指针指向,否则如何针对改内存操作?
你要把后面的东西给接起来才是完整的链表,不然就断开了~~
p->next = q->next 就是把后面该接起来的部分交代以下

大可爱 发表于 2018-10-20 07:12:53

claws0n 发表于 2018-10-19 23:53
不是。待删除的一定有指针指向,否则如何针对改内存操作?
你要把后面的东西给接起来才是完整的链表,不 ...

这样。 free(r); p -> next ; 这样可不可以把r 所指向的结点删掉 ?

claws0n 发表于 2018-10-20 09:34:21

大可爱 发表于 2018-10-20 07:12
这样。 free(r); p -> next ; 这样可不可以把r 所指向的结点删掉 ?

可以啊,但是 p 怎么与 s 链接?这是在链表中常犯的错误
p->next 是 p 的 next,只是一个指针~~

大可爱 发表于 2018-10-20 10:56:34

claws0n 发表于 2018-10-20 09:34
可以啊,但是 p 怎么与 s 链接?这是在链表中常犯的错误
p->next 是 p 的 next,只是一个指针~~

写漏了
p->next =s ;

claws0n 发表于 2018-10-20 11:08:55

大可爱 发表于 2018-10-20 10:56
写漏了
p->next =s ;

对,但是你的 s 是怎么来的???就是 q->next 或者 p->next->next 呀。不然的话你得另外定义一个指针变量
Node * s = q->next; 不是一样的吗??比较不好看,所以不会那样写
页: [1]
查看完整版本: 链表删除语句第二个看不懂