Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only
once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
思路:
用两个指针。一个指针不断前进,另一个指针不动。比较两个指针对应结点的值。如果不同,则删除两个指针之间的所有元素。之后不动的指针移动到移动指针的位置,移动指针继续前进。要处理好最后几个元素的值相同的情况。
题解:
/** * 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) { // empty list if (head == nullptr) return nullptr; int current_value; ListNode* fwd_iter = head->next; ListNode* iter = head; current_value = head->val; while(fwd_iter != nullptr) { if (current_value != fwd_iter->val) { if (fwd_iter != iter->next) { ListNode* recycle = iter->next; while(recycle != fwd_iter) { ListNode* tmp = recycle; recycle = recycle->next; delete tmp; }; } iter->next = fwd_iter; iter = fwd_iter; current_value = iter->val; } fwd_iter = fwd_iter->next; } if (iter->next != nullptr) { ListNode* recycle = iter->next; while(recycle != nullptr) { ListNode* tmp = recycle; recycle = recycle->next; delete tmp; } iter->next = nullptr; } return head; } };