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

考点

  • 双指针

题解

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *left = head, *right = head;
while (right != nullptr) {
while (right != nullptr && left->val == right->val) right = right->next;
left->next = right;
left = left->next;
}
return head;
}
};

思路

根据题意,链表已排序,那么重复的元素就一定是连续的;所以我们使用双指针来处理

左指针指向需要留下的元素,右指针作为游标指针

只要右指针的值等于左指针,就一直向右,遇到不同值停下,再将左右指针指向的节点连接起来即可