题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//如果没有节点或只有一个节点,则返回
if(head==NULL||head->next==NULL)
return head;
//当前元素与下一元素相比,如果相同,删除下一元素
ListNode *current=head;
ListNode *next=head->next;
while(next!=NULL)//当前元素非最后一个,假设current为A,next为B,next->next为C,即A->B->C
{
if(current->val==next->val)//如果A元素与B元素相等
{
current->next=next->next;//A连接C
delete next; //删除B
next=current->next;//next指向C,这里面current仍指向A,结果A->C
}
else//如果A元素不等于B元素
{
current=current->next;//current指向B
next=next->next;//next指向C
}
}
return head;
}
};
解题思路
(1)特殊情况处理,如果没有节点或只有一个节点,直接返回;
(2)含有两个节点及以上,则当前节点与下一节点元素相等,则删除下一节点元素;否则当前节点元素后移。