一、题目:
83.删除排序链表中的重复元素:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2 输出: 1->2
示例 2:
输入: 1->1->2->3->3 输出: 1->2->3
二、思路:
引入两个指针p=head,q=head->next。采用一个while循环遍历链表,删除重复元素。最后返回head。
三、代码(C++):
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL) //判断链表是否为空
return head;
ListNode *p=head;
ListNode *q=head->next; //引入一前一后两个指针
while(q)
{
if(q->val==p->val) //元素重复
{
p->next=q->next;
q=p->next;
}
else
{
p=q;
q=q->next;
}
}
return head;
}
四、拓展:参考答案只是用了一个指针,比较时采用p->next和p,删除重复结点使用p->next=p->next->next
修改后的代码:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *p=head; //p指向头指针
while(p&&p->next)
{
if(p->next->val==p->val) //判断是否重复
{
p->next=p->next->next;
}
else
p=p->next;
}
return head;
}