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
.
單連結串列移除重複元素問題
注意到節點的刪除即可,可能的變形題是移除迴圈雙向連結串列的重複元素
#include <iostream> #include <string> #include <algorithm> using namespace std; struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(NULL){} }; ListNode *deleteDuplicates(ListNode *head){ if(head == NULL || head-> next == NULL) return head; ListNode *p = head->next, *pre = head; while(p){ if(pre->val == p->val){ ListNode *tmp = p->next; pre->next = p->next; delete p; p = tmp; }else{ pre = p; p = p->next; } } return head; } void printList(ListNode *head){ while(head){ cout<<"-->"<<head->val; head = head->next; } cout<<endl; } int main(){ ListNode *head = new ListNode(1); ListNode *p = new ListNode(2); head->next = p; printList(deleteDuplicates(head)); }