Leetcode---83. 删除排序链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 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;
        
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41514525/article/details/82919461