题目描述
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
解题代码
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head == nullptr || head->next == nullptr)
return head;
ListNode * pre = new ListNode(-1);
pre->next = nullptr;
ListNode * prehead = pre;
ListNode * current = head;
ListNode * next = head->next;
while (current != nullptr)
{
if (next == nullptr || current->val != next->val) {
pre->next = current;
pre = current;
current = next;
if (next != nullptr)
next = next->next;
}
else {
while (next != nullptr && current->val == next->val)
{
next = next->next;
}
current = next;
if (next != nullptr)
next = next->next;
}
}
pre->next = nullptr;
return prehead->next;
}
};
解题思路
- 挺简单的,不知道为什么写了好一会儿。
- 这个链表可能为空,我们先生成一个新节点作为去重后列表的首节点,保证链表不为空。
- 相邻两个节点比较,不相等则右移,想等则移动next指针去重。