【刷题】删除排序链表中的重复元素

简介: 【刷题】删除排序链表中的重复元素

题目描述


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


示例


示例 1:


微信图片_20221112161236.jpg


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

示例 2:


微信图片_20221112161239.jpg


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

提示:


链表中节点数目在范围 [0, 300] 内

-100 <= Node.val <= 100

题目数据保证链表已经按升序 排列


解题思路


这道题似曾相识,又是链表相关的题目。

我们之前既刷过 移除重复元素 的题,

也刷过链表合并的题:合并两个有序链表


有了之前的解题思路,在解答这道题就简单了:


因为是升序链表,那么就比较当前元素是否和下一个元素相等,如果相等就移除下一个元素

下面是我的解题代码,关键步骤我会写好注释。


AC代码


/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
    //输出参数赋值给cur 不直接使用head的原因是避免取不到列表中的第一个值
    cur := head
    //循环取值
    for cur != nil && cur.Next != nil {
        //如果相邻的是重复元素,则把第二位的重复元素移除,替换成第三位的元素
        if cur.Val == cur.Next.Val {
            cur.Next = cur.Next.Next
        }else {
            cur = cur.Next
        }
    }
    //注意:这是返回head,而不是返回cur
    return head
}


运行结果


微信图片_20221112161243.jpg



相关文章
|
3月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
46 1
01_移除链表元素
01_移除链表元素
|
3月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
61 0
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
39 0
|
3月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
39 0
|
5月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
5月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
5月前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表
|
7月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
7月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表