# LeetCode算法学习之--双指针-[83] 删除排序链表中的重复元素

86 阅读1分钟

题目

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

分析

  1. 链表元素
  2. 有重复项,有重复项的地方需要跳过

解法:双指针


思路
1. 因为是需要返回一个链表 我这边采取重新造一个链表 pre ,相当于一个慢指针
2. 才用一个快指针i进行探路
 1. 因为有重复值 所以当 pre.val!==i.val 的时候,给pre.next添加一个
 值为new ListNode(i.val)的节点

// @lc code=start
var deleteDuplicates = function (head) {
    // 因为链表长度可能为0 所以排除 链表长度为0 和为1的情况
  if (!head || !head.next) return head;

//   制造一个dummy节点 来记录链表头部
  const dummy = new ListNode();

//   新建一个pre链表,相当于一个慢指针
  let pre = new ListNode(head.val);
//   创建一个指针来探路
  let i = head.next;
  dummy.next = pre;
  while (i) {
    if (i.val !== pre.val) {
      pre.next = new ListNode(i.val);
      pre = pre.next;
    }
    i = i.next;
  }
  return dummy.next;
};

//时间复杂度:O(n)
//空间复杂度:O(n)

// @lc code=end

总结

今天这道题是主要是练习使用双指针来除去多余的数字类题目,这道题和 80.删除重复数组项2很相似.

大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢

大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持

文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com

\