- 题目:
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
- 解题思路
只用判断链表中是否有相同值的节点,有就全部跳过。
代码实现(C++)
ListNode* deleteDuplicates(ListNode* head) {
ListNode *newhead = new ListNode(0);
newhead->next = head;
ListNode *p = head, *q = newhead;
while(p != nullptr && p->next != nullptr)
{
if(p->val == p->next->val)
{
while(p->next != nullptr && p->val == p->next->val) //判断节点是否有重复值,有则跳过这些节点
p = p->next;
p = p->next;
}
else
{
q->next = p;
q = p;
p = p->next;
}
}
q->next = p;
return newhead->next;
}