1. 程式人生 > >[LeetCode] Remove Duplicates from Sorted List II 移除有序連結串列中的重複項之二

[LeetCode] Remove Duplicates from Sorted List II 移除有序連結串列中的重複項之二

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.

和之前那道 ( http://www.cnblogs.com/grandyang/p/4066453.html 

) 不同的地方是這裡要刪掉所有的重複項,由於連結串列開頭可能會有重複項,被刪掉的話頭指標會改變,而最終卻還需要返回連結串列的頭指標。所以需要定義一個新的節點,然後鏈上原連結串列,然後定義一個前驅指標和一個現指標,每當前驅指標指向新建的節點,現指標從下一個位置開始往下遍歷,遇到相同的則繼續往下,直到遇到不同項時,把前驅指標的next指向下面那個不同的元素。如果現指標遍歷的第一個元素就不相同,則把前驅指標向下移一位。程式碼如下:

/**
 * 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 || !head->next) return head; ListNode *start = new ListNode(0); start->next = head; ListNode *pre = start; while (pre->next) { ListNode
*cur = pre->next; while (cur->next && cur->next->val == cur->val) cur = cur->next; if (cur != pre->next) pre->next = cur->next; else pre = pre->next; } return start->next; } };