83. Remove Duplicates From Sorted List
问题概述
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2
Output: 1->2
Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
分析
这是一道简单的链表问题。用两个指针一前一后指向链表。如果两个指针指向的值相等,那么就让第二个指针一直往后移,直到与第一个指针不同为止。然后让第一个指针的next指向第二个指针,两个指针同时往后挪,进行下面的操作。
要注意的是,当list的结尾几个node是重复的时候,如1->2->3->3->3,要令第一个指针->next为null,这样list尾部不会丢失。
c++代码
/**
* 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) return NULL;
ListNode * i = head;
ListNode * j = head->next;
while(j){
if(i->val == j->val) {
j = j->next ? j->next : NULL; // to deal with the last fews same node case
if(!j) i->next = j;
}
else{
i->next = j;
j = j->next;
i = i->next;
}
}
return head;
}
};