面試題 02.01. 移除重復節點
編寫代碼,移除未排序鏈表中的重復節點。保留最開始出現的節點。
示例1:
輸入:[1, 2, 3, 3, 2, 1] 輸出:[1, 2, 3]
示例2:
輸入:[1, 1, 1, 1, 2] 輸出:[1, 2]
提示:
- 鏈表長度在[0, 20000]范圍內。
- 鏈表元素在[0, 20000]范圍內。
進階:
如果不得使用臨時緩沖區,該怎么解決?
解題思路:利用三指針思路遍歷數組,兩個指針找到重復節點刪除,利用第三個指針鏈接刪除之后的鏈表,保證鏈表結構。
? 總結這道題需要非常縝密的心思!大家需要多多,有著非常多的東西需要思考!
代碼實現:
struct ListNode* removeDuplicateNodes(struct ListNode* head){if(head == NULL || head->next == NULL){return head;}struct ListNode* prev = NULL;struct ListNode* Cur = head;struct ListNode* Next = head->next;while (Next){if(Cur->data != Next->data){prev = Cur;Cur = Next;Next = Next->next;}else{while (Next && Cur->data == Next->data){Next = Next->next;//頭節點就是重復節點if(prev){prev->next = Next;}else{head = Next;}}while (Cur != Next){ListNode* del = Cur;Cur =Cur->nextfree(del);}if(Next) //Next不為空指針Next = Next->next; }} return head;
}
謝謝大家的點贊和收藏!!👍