C++ 什么';两次删除链表有什么区别?

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;

我编写了两个方法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;                                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;