LeetCode 82
Remove Duplicates from Sorted List II
Problem Description:
将有序链表中具有重复数值的结点都删掉
具体的题目信息:
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/Solution:
解题思路
需要用到三个指针:r
、pre
、p
。其中,[pre, p]
范围内的结点数值都相等,r
指向pre
结点的前一结点。编程实现
(1)若p->val==pre->val
,需要考虑p
是否是尾结点和pre
是否是头结点
(2)若p->val!=pre->val
,需要考虑这两个指针是否相邻和pre
是否是头结点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL)
return head;
if (head->next == NULL)
return head;
ListNode* r = head;
ListNode* pre = head;
ListNode* p = head->next;
while(p){
if (p->val == pre->val) {
if(p->next == NULL) {
if (pre == head) {
head = NULL;
} else {
r->next = NULL;
}
return head;
}
p = p->next;
} else {
if (pre->next == p) {
r = pre;
pre = pre->next;
p = p->next;
} else {
if (pre == head) {
head = p;
pre = p;
p = p->next;
} else {
r->next = p;
pre = p;
p = p->next;
}
}
}
}
return head;
}
};