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


题目——链接

image-20211005184131269


单指针法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//一个指针往后遍历
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next)
{
return head;
}
ListNode* tempnode = head;//这个头结点里面好像有元素
while(tempnode->next)
{
if(tempnode->val == tempnode->next->val)
{
tempnode->next = tempnode->next->next;
}
else
{
tempnode = tempnode->next;
}
}
return head;
}
};

双指针-前后指针法

注意前后指针的链接

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
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next)
{
return head;
}
ListNode* Prev = head;
ListNode* Next = head->next;

while(Next)
{
if(Prev->val == Next->val)
{

Prev->next = Next->next;
Next = Next->next;
}
else
{
Prev= Next;
Next = Next->next;
}
}
return head;
}
};

递归法

感谢这位老哥的分享——链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next)
{
return head;
}
head->next = deleteDuplicates(head->next);
if(head->val == head->next->val)
{
head = head->next;
}

return head;
}
};

图解:

image-20211005183636285