82.删除排序链表中的重复元素 II

一、题目描述

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

1
2
输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

1
2
输入: 1->1->1->2->3
输出: 2->3

二、题解

1.算法描述

  • 迭代法

2.个人分析

  • 1.使用哨兵节点放置在头节点之前;

    2.使用头指针开始遍历链表,用while循环找到不相同的值时,就删除值相同的节点

    3.令pre指向head

    4.循环迭代

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
struct ListNode *deleteDuplicates(struct ListNode *head)
{
if (!head || !head->next)
return head;
struct ListNode *prev = (struct ListNode *)malloc(sizeof(struct ListNode));
prev->next = head;
struct ListNode *pre = prev;
while (head != NULL && head->next != NULL)
{
int temp = head->val;
if (head->val == head->next->val)
{
while (head->val == temp)
{
head = head->next;
if (!head)
break;
}
pre->next = head;
}
else
{
pre = head;
head = head->next;
}
}
return prev->next;
}