AcWing 29. 删除链表中重复的节点
原题链接
简单
作者:
Kiyomi
,
2024-09-08 21:33:54
,
所有人可见
,
阅读 2
class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
if (!head) return nullptr; // 如果链表为空,直接返回
// 使用dummy节点来处理头节点的情况
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy; // 用prev指针来跟踪前驱节点
ListNode* cur = head;
while (cur) {
// 如果当前节点和下一个节点的值相同,跳过所有重复的节点
if (cur->next && cur->val == cur->next->val) {
// 一直往后跳过值相同的节点
while (cur->next && cur->val == cur->next->val) {
cur = cur->next;
}
// 跳过所有重复的节点,prev的next指向下一个不重复的节点
// 如果从头结点就开始重复,则prev->next 的修改会间接影响 dummy->next
prev->next = cur->next;
} else {
// 如果当前节点不重复,前驱指针往前移动
prev = cur;
}
cur = cur->next;
}
return dummy->next; // 返回新的链表头
}
};