📅  最后修改于: 2023-12-03 14:49:22.391000             🧑  作者: Mango
双向链表是一种常用的数据结构,在某些情况下可能会出现相邻的重复节点,需要将其删除。本文将介绍如何在C++中实现这个操作。
我们可以通过遍历链表,比较相邻节点的值,将重复的节点删除。具体步骤如下:
C++代码实现如下:
struct ListNode {
int val;
ListNode* next;
ListNode* prev;
ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}
};
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) { // 链表为空或只有一个节点
return head;
}
ListNode* p = head;
ListNode* q = head->next;
while (q) {
if (p->val == q->val) { // 删除重复节点
p->next = q->next;
if (q->next) {
q->next->prev = p;
}
ListNode* tmp = q;
q = q->next;
delete tmp;
} else { // 继续遍历
p = q;
q = q->next;
}
}
return head;
}
下面是一些测试样例,供您参考:
输入:
1 <-> 2 <-> 2 <-> 3
输出:
1 <-> 3
输入:
1 <-> 1 <-> 2 <-> 3 <-> 3
输出:
2
输入:
1 <-> 1
输出:
空链表
本文介绍了如何在C++中实现从双向链表中删除相邻的重复节点。这是一种常用的数据结构操作,可以帮助程序员更加高效地处理链表。希望本文对您有所帮助!