刪除排序連結串列中重複的結點
阿新 • • 發佈:2019-02-13
題目是如此的清楚,以至於不會造成誤解。現將要點羅列如下:
連結串列為空,不必多說;
如果恰恰是頭結點與頭結點的後一個重複了,這種情況是可以發生的,那頭結點就要被刪除,另選新的結點作為頭結點。如何處理這種特殊情況,多申請一個指標就可以了。
本題的具體實現細節,詳見程式碼:
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(NULL == pHead) return NULL; ListNode* pre = NULL, *cur = pHead; while(NULL != cur){ if(NULL != cur->next && cur->val == cur->next->val){ //凡是涉及解引用,就要判空,這是職業素養!!! int repeat = cur->val; ListNode* pNext; while(NULL != cur && cur->val == repeat){ //通過迴圈刪除所有值為repeat的結點 pNext = cur->next; delete cur; cur = pNext; } }else{ pre = cur; //pre指向不重複的結點 cur = cur->next; } if(NULL == pre){ pHead = cur; }else{ pre->next = cur; } } return pHead; } };