I、Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given1->1->2, return1->2.
Given1->1->2->3->3, return1->2->3.
PS:遍历,而后记录pre,并删除后续重复node
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *deleteDuplicates(ListNode *head) { 12 ListNode *cur=head,*pre=NULL; 13 while(cur!=NULL){ 14 if(pre==NULL){ 15 pre=cur; 16 cur=cur->next; 17 continue; 18 } 19 ListNode *next=cur->next; 20 if(pre->val==cur->val){ 21 pre->next=next; 22 }else 23 pre=cur; 24 cur=next; 25 } 26 return head; 27 } 28 };
II、
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.
删除所有重复项。
PS:循环比较next->val==cur->val,若next跳动则剔除cur至next之间的节点。否则右移left指针。
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *deleteDuplicates(ListNode *head) { 12 if(head==NULL) return NULL; 13 ListNode h(-1); 14 ListNode *res=&h; 15 res->next=head; 16 ListNode *cur=head,*pre=NULL,*left=res; 17 while(cur!=NULL){ 18 ListNode* next=cur->next; 19 while(next!=NULL&&cur->val==next->val){ 20 next=next->next; 21 } 22 if(next==cur->next){ 23 left=cur; 24 }else{ 25 left->next=next; 26 } 27 cur=next; 28 } 29 return res->next; 30 } 31 };