在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5
阿新 • • 發佈:2019-01-03
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if (pHead == NULL || pHead->next == NULL) return pHead; /*---------先為連結串列建立一個頭結點---------*/ ListNode* p1 = new ListNode(0); p1->next = NULL;//p1的軌跡記錄沒有重複的節點 ListNode* head = p1; ListNode* p2 = pHead;//p2用於遍歷原連結串列,方便p1跳過重複的點 while(p2){ if(p2->next && p2->val == p2->next->val){ while(p2->next && p2->val == p2->next->val){ p2 = p2->next; } p2 = p2->next;//p2跳過重複串中的最後一個重複節點 //防止連結串列尾出現重複,p2==NUll,程式跳出will迴圈,而p1沒有跳過尾部重複 p1->next = p2; } else{//如果沒有重複 p1->next = p2; p1 = p2; p2 = p2->next; } } return head->next;//返回時要去除頭節點 } };