【双向链表练习】 - 删除双向链表重复结点c➕➕
时间: 2024-12-22 16:10:45 浏览: 15
删除双向链表中的重复节点是一个常见的链表操作,通常涉及到遍历链表、比较节点值并删除多余节点。这里简单解释一下这个过程:
假设我们有一个双向链表,每个节点包含数据 `val` 和两个指针 `prev` 和 `next`,分别指向前一个节点和后一个节点。删除重复节点的步骤大致如下:
1. 定义两个指针 `current` 和 `temp`,初始化 `current` 为链表头节点。
2. 循环遍历链表,直到 `current` 为 `null`:
a. 检查 `current.val` 是否等于 `temp.val`。如果相等,则需要删除当前节点。
b. 如果不相等,将 `temp` 更新为 `current` 并继续下一轮检查。
c. 当发现重复节点时,更新 `current.next` 为重复节点的下一个节点,使其跳过重复部分。
3. 最后,记得处理特殊情况,比如第一个元素就是重复的,或者整个链表都是重复的。
以下是一个简单的 C++ 示例:
```cpp
struct ListNode {
int val;
ListNode* prev;
ListNode* next;
};
ListNode* deleteDuplicates(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode dummy(0);
dummy.next = head;
ListNode* current = &dummy;
while (current->next != nullptr && current->next->next != nullptr) {
if (current->next->val == current->next->next->val) {
current->next = current->next->next;
current->next->prev = current;
} else {
current = current->next;
}
}
return dummy.next;
}
```
阅读全文