- 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;
}
};