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 }else23 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 };