C++ 什么';两次删除链表有什么区别?
我编写了两个方法2删除给定的节点,我认为它们是相同的。然而,它们给出了不同的结果C++ 什么';两次删除链表有什么区别?,c++,linked-list,C++,Linked List,我编写了两个方法2删除给定的节点,我认为它们是相同的。然而,它们给出了不同的结果 node *q = c->next; c->data = q->data; second: c->data = c->next->data; c->next = q->next; c->next = c->next->next; delete q;
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;
首先,
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;
我试试这个例子(链表:1,2,3,4,5,6,7,8,9,10和c==3)
第一种方法给出的结果是:1,2,4,5,6,7,8,9,10,这就是我想要的
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;
但第二个结果是:1,2,4,-572662307
我不明白有什么不同 一个显著的区别是,在第一次之后,
c->next
将指向(算法之前)c->next->next
。第二次之后,c->next
将指向已删除的节点
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;
另一个区别是,第一个删除算法之前的
c->next
,而第二个删除算法之前的c->next->next
。在第二个中,您将c->next
更改为c->next
,你能具体解释一下c->next LOSS是什么时候吗?拿出一些纸和一支铅笔,画出每种情况下会发生什么。我明白了,我应该在编码一整天后休息一下。。。
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;