83. 删除排序链表中的重复元素|刷题打卡

224 阅读2分钟

83. 删除排序链表中的重复元素|刷题打卡

create by db on 2021-3-4 01:21:40
Recently revised in 2021-3-4 01:31:50

闲时要有吃紧的心思,忙时要有悠闲的趣味

原题链接 83. 删除排序链表中的重复元素 目录

题目描述

返回目录

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

示例 1:

输入: 1->1->2
输出: 1->2
示例 2:

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

思路分析

 这是一道简单题,不过对我们这些算法小白来说是个认识链表这一数据结构的不错选择。

 那什么是链表呢?我觉得小灰算法讲的不错。没找到电子版,直接拍的照哈。

 对于链表的遍历来说,我们只要判断self.next存不存在,存在就往下一个next找,不存在就返回,所以使用while循环。

 因为题目中给的是排序列表,所以我们直接判断self.next是不是等于当前的self就行。代码走起。

AC 代码

题解:

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var deleteDuplicates = function(head) {
    // 非空判断,如果头节点为空或只有头结点,没必要遍历,直接返回
    if(head === null || head.next === null){
        return head
    }
    let now = head
    let nextNode = head.next
    // 遍历链表的下一个节点
    while (nextNode !== null){
        // 判断当前是否和下一个的值相等
        if(now.val == nextNode.val){
            // 如果相等,应该移除下一个(即将当前节点的next指针指向被删除节点的下一个节点)
            now.next = nextNode.next
            nextNode = nextNode.next
        }else{
           // 如果不相等,换成下一个值,接着循环
            now = nextNode
            nextNode = nextNode.next
        }
    }
    return head;

};

总结

返回目录

 很简单的一道题,柿子先挑软的捏……

 三月你好,春暖花开。加油!

 本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情

后记:Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富文章的动力!GitHub 地址

文档协议

知识共享许可协议
db 的文档库db 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于github.com/danygitgit上的作品创作。
本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。