今天先写一下更简单的Ⅰ,明天再来写Ⅱ…
链表真的是error的天堂,需要反复检查有没有出现NULL->这种。
思路是先定两个指针,x用于记录出现重复元素的前一个指针,y用于遍历重复元素,当y后面没有和y重复了的元素时x->next更改为y,每一个循环将x和y的指针后移一位。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *hh=new ListNode(0,head);
ListNode *x=hh;
ListNode *y=x->next;
if(!y) return hh->next;
while(1){
while(y->next&&y->val==y->next->val) y=y->next;
x->next=y;
x=x->next;
if(y->next) y=y->next;
else break;
}
return hh->next;
}
};