while (tempor) { for (Node* p = A; p; p = p->next) { if (p->data == tempor->data) { prevb->next = tempor->next; } } /* prevb 应该为链表中 tempor 的前一个节点。 但是如果 tempor 被删除了,tempor->next 还在链表中,tempor 本身已经不在链表中了。 这时令 prevb = tempor ,那么 prevb 这个节点就已经不链表中了。所以通过 prev->next = tempor->next 不能从链表中删除 tempor 。 所以 5, 4 连续两个删除只有第一个成功了。 */ prevb = tempor; tempor = tempor->next; }