【LeetCode】82. 刪除排序連結串列中的重複元素 II
阿新 • • 發佈:2018-12-27
給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。
基本思路是第一層迴圈,兩個指標分別指向當前元素和它的前繼,目的是如果有重複,需要刪除當前元素,然後直到當前元素為空
第二層迴圈,兩個指標分別指向當前元素的下一個元素和它的前繼,目的是如果有重複,需要刪除當前元素之後的所有元素,然後直到當前比較元素為空
ListNode* Solution::deleteDuplicates(ListNode* head) { ListNode *pnewhead = new ListNode(0); ListNode *pcurrentlast = pnewhead; ListNode *pcurrent = head; unsigned int DuplicateFlag = 0; if((head == NULL)||(head->next == NULL)) { return head; } pcurrentlast->next = head; while(pcurrent != NULL) { ListNode *pnext = pcurrent->next; ListNode *pnextlast = pcurrent; while(pnext != NULL) { if(pnext->val == pcurrent->val) { DuplicateFlag = 1; pnextlast->next = pnext->next; pnext = pnext->next; } else { pnext = pnext->next; pnextlast = pnextlast->next; } } /*no data duplicate*/ if(0 == DuplicateFlag) { pcurrent = pcurrent->next; pcurrentlast = pcurrentlast->next; } else { /*data duplicate,delete current node*/ pcurrentlast->next = pcurrent->next; pcurrent = pcurrent->next; DuplicateFlag = 0; } } return pnewhead->next; }