• 【LeetCode-链表】删除链表中的重复元素


    题目描述

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

    输入: 1->1->2->3->3
    输出: 1->2->3
    

    题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

    思路

    双指针法。从链表头开始构造一快一慢两个指针:slow和fast,fast先移动,当遇到和slow元素值不同的节点时停下来,然后将slow指向fast并对slow和fast进行更新。代码如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteDuplicates(ListNode* head) {
            if(head==nullptr){
                return nullptr;
            }
    
            ListNode* slow = head;
            ListNode* fast = head->next;
            while(fast!=nullptr){   // 注意终止条件
                while(fast!=nullptr && fast->val==slow->val){
                    fast = fast->next;
                }
                slow->next = fast;
                slow = fast;
                if(fast!=nullptr){  // 注意判断是否为空
                    fast = fast->next;
                }
            }
            return head;
        }
    };
    
    • 时间复杂度:O(n)
      遍历链表一边。
    • 空间复杂度:O(1)

    更简洁的写法:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteDuplicates(ListNode* head) {
            if(head==nullptr){
                return nullptr;
            }
    
            ListNode* curNode = head;
            while(curNode!=nullptr && curNode->next!=nullptr){
                if(curNode->val==curNode->next->val){
                    curNode->next = curNode->next->next;
                }else{
                    curNode = curNode->next;
                }
            }
            return head;
        }
    };
    
  • 相关阅读:
    0diff算法参考资料
    js 对象属性值
    一些带有设计模式的优秀代码
    vue 配置多页面
    cms 管理系统
    网络技术:EtherChannel 链路汇聚
    网络技术:VLAN 中继协议(VTP)
    网络管理:管理信息库
    网络管理:抽象语法表示 ASN.1
    网络管理:基本编码规则(BER)
  • 原文地址:https://www.cnblogs.com/flix/p/12670324.html
Copyright © 2020-2023  润新知