前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一天一大 leet(移除重复节点)难度:简单 DAY-26

一天一大 leet(移除重复节点)难度:简单 DAY-26

作者头像
前端小书童
发布2020-09-24 11:26:03
3030
发布2020-09-24 11:26:03
举报
文章被收录于专栏:前端小书童前端小书童
题目(难度:简单):

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例

  1. 示例1
代码语言:javascript
复制
 输入:[1, 2, 3, 3, 2, 1]
 输出:[1, 2, 3]
  1. 示例2
代码语言:javascript
复制
 输入:[1, 1, 1, 1, 2]
 输出:[1, 2]

提示

  1. 链表长度在[0, 20000]范围内
  2. 链表元素在[0, 20000]范围内

抛砖引玉

整体思路如下:
  • 逐个循环head上的节点
  • 节点存在则其位置用其next代替
实现:
  1. 存贮出现过的节点val(哈希表)
  • 循环可以用递归或者while实现
  • 判断节点是否存在:使用set、map、Array、Object均可存储出现的节点val
  1. 每个节点查询之后节点是否与其重复(两重循环)
哈希表
代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var removeDuplicateNodes = function(head) {
  if (head == null) return head;
  const map = new Map();
  map.set(head.val, true);
  let node = head.next;
  let prev = head;
  while (node) {
    if (map.has(node.val)) {
      prev.next = node.next;
    } else {
      map.set(node.val, true);
      prev = prev.next;
    }
    node = node.next;
  }
  return head;
};
两重循环
代码语言:javascript
复制
const removeDuplicateNodes = (head) => {
   let ob = head;
    while (ob != null) {
        let oc = ob;
        while (oc.next != null) {
            if (oc.next.val == ob.val) {
                oc.next = oc.next.next;
            } else {
                oc = oc.next;
            }
        }
        ob = ob.next;
    }
    return head;
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 提示
  • 抛砖引玉
    • 整体思路如下:
      • 实现:
        • 哈希表
          • 两重循环
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档