• 删除排序链表中的重复元素


    题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
    题目描述:
    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
    返回同样按升序排列的结果链表。

    题解:

    
    /**
     * 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) {
            ListNode *pre = head;
            if(!head || !head->next)
                return head;
            ListNode *cur = head->next;
            while(cur != nullptr)
            {
                 if(cur->val != pre->val)
                {
                    pre = cur;
                    cur = cur->next;
                }
                else{
                   cur = cur->next;
                   pre->next = cur;
                }
                
            }
           return head;
        }
    };
    
    

    题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
    题目描述:
    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现的数字。返回同样按升序排列的结果链表。

    题解:
    注意点:

        // 1 --> 1 --> 1 --> 2 --> 3
        //     head  next
        //1.则需要移动next直到出现与当前head.value不相等的情况(含null)
        //2.并且此时的head已经不能要了,因为已经head是重复的节点
        //--------------else-------------
        //      1 --> 2 --> 3
        //     head  next
        //3.如果没有出现1的情况,则递归返回的节点就作为head的子节点
    
    /**
     * 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 || !head->next)
                return head;
            ListNode *dummy = new ListNode(-1);
            dummy->next = head;
            ListNode *pre = dummy;
            ListNode *cur = head;
            while(cur != nullptr && cur->next != nullptr)
            {
                if(cur->val != cur->next->val)
                {
                    pre = cur;
                    cur = cur->next;
                }else
                {
                   while(cur != nullptr && cur->val == pre->next->val)
                   {
                       cur = cur->next;
                   }
                   pre->next = cur;
                }
            }
            return dummy->next;
    
        }
    };
    
  • 相关阅读:
    主机不能访问虚拟机CentOS中的站点
    linux安装redis
    java获去json所有对象
    Java nio和io
    [shell基础]——if/for/while/until/case 语句
    [shell基础]——整数比较;字符串比较;文件测试;逻辑测试符
    [shell基础]——数组
    [shell基础]——I/O重定向
    [shell基础]——tr命令
    [shell基础]——split命令
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14872235.html
Copyright © 2020-2023  润新知