1.题目
给定已排序的链表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。
示例:
Input: 1->2->3->3->4->4->5 Output: 1->2->5
2.思路
新建链表头结点指针 dummy
如果当前节点cur的值与下一个节点的值相同,两个节点都需要被删除。
为了保证删除链表之后的链表仍然是相连的,当前节点的前一个节点pre 和后边比cur值大的节点相连。
3.实现
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr || head->next == nullptr)
return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* pre = dummy;
ListNode* cur = head;
while(cur != nullptr)
{
while(cur->next != nullptr && cur->val == cur->next->val)
cur = cur->next;
//这里的if else 是为了保证 pre 始终与下一个没有重复的节点连接在一起。
if(pre->next == cur)
pre = cur;
else
pre->next = cur->next;
cur = cur->next;
}
return dummy->next;
}
};