Task:
思路与解法:
【解法一:双指针思路快慢指针法】
(1)首先还是便捷检查,如果链表为空或者链表只有一个,那就直接返回链表;
(2)常规情况:
快慢指针一个在前一个在后,进行遍历,
遇到元素相等的时候,如果快指针已经到头了,那就直接让慢指针的下一个元素指到NULL,如果没有到头,那就把快指针的下一个指给慢指针的next,然后再把快指针的下一个元素的赋值给快指针,相当于之前的q就没有了!
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if( head==NULL || head->next==NULL)
return head;
ListNode* p = head;
ListNode* q = head->next;
while(p->next != NULL){
if(p->val == q->val){
if(q->next == NULL)
p->next = NULL;
else{
p->next = q->next;
q = q->next;
}
}else{
p = p->next;
q = q->next;
}
}
return head;
}
};
提交结果:
可以看出来这个方法并不是非常好!