zoukankan      html  css  js  c++  java
  • 【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;
        }
    };
    
  • 相关阅读:
    spring原理
    架构师和数学
    项目经理需要注意的地方
    如何快速掌握一门新技术
    项目管理要做啥
    编程原则
    架构设计的常用思想
    聊聊编程范式
    程序员与哲学家
    IT人员如何有效规划自己时间
  • 原文地址:https://www.cnblogs.com/flix/p/12670324.html
Copyright © 2011-2022 走看看