题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
if (pHead == nullptr) return nullptr;
// 创建一个虚拟头节点
ListNode* dummy = new ListNode(0);
dummy->next = pHead;
ListNode* prev = dummy; // 前驱节点
ListNode* current = pHead; // 当前节点
while (current != nullptr && current->next != nullptr) {
if (current->val == current->next->val) {
// 找到重复节点,跳过所有重复的节点
int duplicateVal = current->val;
while (current != nullptr && current->val == duplicateVal) {
current = current->next;
}
prev->next = current; // 跳过所有重复的节点
} else {
// 无重复,移动前驱节点
prev = current;
current = current->next;
}
}
// 返回新的头节点
ListNode* newHead = dummy->next;
delete dummy; // 释放虚拟头节点的内存
return newHead;
}
};

查看20道真题和解析