给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
-----------------------------------------------------------------------------------------------------------------------------------------------------------
由于这个链表是有序的,那么操作就很容易了,直接用一个int k来记录每次出现的不同val,k在不同的val第一次出现时更新,如果有重复,那么一定就紧挨着在后面出现(因为有序)这里只要不停的后移,直到出现不同的val 时,更新k,并且移动指针。 说起来有点抽象,还是看代码吧。。 这次超过了99.96%的提交,hahahahahah(虽然是道简单题,但还是很happy)
AC:
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head==NULL)
return head;
ListNode* root=head;
ListNode* rr=head;
ListNode* r=root->next;
int k=root->val;
while(r!=NULL)
{
if (r->val==k)
{
r=r->next;
}else //这里手画一个链表更容易理解。
{
k=r->val;
root->next=r;
root=root->next;
r=r->next;
}
}
root->next=NULL; //最后一定要将root->next置空,不然对于【1,1,1】的情况就是输出【1,1,1】了。
return rr;
}
};