题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
分类:Linked List
代码:维护两个指针ptr,pre
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) 13 return head; 14 if(head && !head->next) 15 return head; 16 ListNode *newHead = new ListNode(head->val - 1); 17 newHead->next = head; 18 ListNode *pre = newHead; 19 ListNode *ptr = newHead; 20 while(head) 21 { 22 if(pre->val != head->val && (!head->next || head->val != head->next->val)) 23 { 24 ptr->next = head; 25 ptr = ptr->next; 26 } 27 pre = head; 28 head = head->next; 29 } 30 ptr->next = NULL; 31 32 return newHead->next; 33 } 34 };