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
.
解題思路:新建一個鏈表,遍歷原來鏈表,若不重復則將結點插入新鏈表,重復則跳過.為了避免遍歷最後為重復結點,最後需將新鏈表末尾置NULL
#include#include using namespace std; //Definition for singly - linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *deleteDuplicates(ListNode *head) { ListNode*ResultList = new ListNode(0); ListNode*TmpResultNode = ResultList; ListNode*NorepeatNode = head; while (NorepeatNode != NULL){ ListNode*PreNode = NorepeatNode; while (NorepeatNode->next != NULL&&NorepeatNode->val == NorepeatNode->next->val) NorepeatNode = NorepeatNode->next; if (NorepeatNode == PreNode) //如果不重復,插入 { TmpResultNode->next = NorepeatNode; TmpResultNode = TmpResultNode->next; } NorepeatNode = NorepeatNode -> next; } TmpResultNode->next = NULL; //尾部置NULL return ResultList->next; }