初始代码
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* pre=head;
ListNode *p=head->next;
int m=head->val;
while(p!=nullptr)
{
if(p->val!=m)
{
m=p->val;
pre=p;
p=p->next;
}
else
{
pre->next=p->next;
p=pre->next;
}
}
return head;
}
};
存在问题
没有考虑链表为空的情况
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* pre=head;
if(head==nullptr){
return 0;
}
ListNode *p=head->next;
int m=head->val;
while(p!=nullptr)
{
if(p->val!=m)
{
m=p->val;
pre=p;
p=p->next;
}
else
{
pre->next=p->next;
p=pre->next;
}
}
return head;
}
};
进一步优化
在这个过程中,我们用了三个变量,pre,p 和整形的 m,是否可以使用一个来解决呢?
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* p=head;
while(p!=nullptr&& p->next!=nullptr)
{
if(p->val!=p->next->val)
{
p = p->next;
}
else
{
p->next=p->next->next;
}
}
return head;
}
};