- head 总结赋值后 ,head是不发生改变的、
- 使用双指针,相等的时候slow不变,不对等的时候先改变next指针指向fast,然后slow直接跑到fast所在位置,然后fast向下继续走,准备迎接接下来的继续遍历。
- 最后slow->next 后的要置NULL,fast为空的时候返回。
- 最后返回head
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { // write code here if(!head) return NULL; ListNode* slow = head; ListNode* fast = head; while(fast!=NULL){ if(fast->val!=slow->val){ slow->next = fast; slow = slow->next; } fast = fast->next; } slow->next = NULL; return head; } };