leetcode算法83.删除排序链表中的重复元素

简介: 本文讲解如何用leetcode算法83.删除排序链表中的重复元素。

一、leetcode算法



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


1.1、题目


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


示例 1:


输入:head = [1,1,2]

输出:[1,2]

示例 2:


输入:head = [1,1,2,3,3]

输出:[1,2,3]


1.2、思路


思路一:由于链表是排序好的,那么我们只需要从第一个开始,让他们两个之间相互比较,假如第一个和第二个相等,那么就把第一个节点的next指向第三个节点的位置,这样重复的第二个就被删掉了,直到遍历完整个链表。


1.3、答案


19.png


class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null){
            return head;
        }
        //定义一个游标,用来判断链表是否遍历完
        ListNode pre = head;
        //判断游标下一个是否还有,如果没有证明链表遍历完毕
        while(pre.next != null){
            //判断当前节点的值和下一个节点的值是否相等
            if(pre.val == pre.next.val ){
                //如果相等则将当前值的下一个指向,指向当前节点的下下一个,也就是说如果原来当前节点1指向2,2指向3,
                //那么现在1直接指向3,把中间的2去掉,因为2和1的值是相等的
                pre.next = pre.next.next;
            }else{
                //如果不相等,则将pre指向下一个节点。
                pre = pre.next;
            }
        }
        return head;
    }
}


复杂度分析


时间复杂度:O(n),其中 n 是链表的长度。


空间复杂度:O(1)。

相关文章
|
3天前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
12 4
|
3天前
leetcode代码记录(下一个更大元素 II
leetcode代码记录(下一个更大元素 II
5 0
|
3天前
|
索引
leetcode代码记录(下一个更大元素 I
leetcode代码记录(下一个更大元素 I
6 0
|
4天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
9 0
|
4天前
leetcode代码记录(移除元素
leetcode代码记录(移除元素
7 0
|
6天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
18 0
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——反转链表
|
2月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
2月前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解