js算法题解(第九天)---LeetCode:83.删除排序链表中的重复元素

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

前言

每天至少一道算法题,死磕算法

昨天我们讲了合并两个有序链表,想必大家对链表都有了一定的了解,今天我们就继续在深入链表,学一下链表的删除,学过数据结构的小伙伴都知道,链表的删除要比循环链表要复杂一些,我们今天要做的事,就是把删除链表变得简单

题目

这是leetcode上的第83道题----83.删除排序链表中的重复元素

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

示例 1:

输入: head = [1,1,2]
输出: [1,2]
复制代码

思路

第一步:从题目中提取关键字

  • 1.删除所有重复的元素,使每个元素只出现一次

第二步:分析

  • 1.只要是对链表操作那就一定是cur.next=xxxx;
    1. 如果要取出重复元素的话,拿我们首先要判断当前节点的值和下一个节点的值是否相等
    • 如果相等,那么当前节点的next属性指向如果 - 如果相等,那么当前节点的next属性指向下下下b个o点

    • 如果不相等,那么继续循环链表

题解

var deleteDuplicates = function(head) {
  // 老套路,循环链表就可以
  let cur = head;
  while(cur&&cur.next){
      // 判断当前的值是否和下一次的值是相等的,如果是相等的话,把指针指向下下一个节点
      if(cur.val===cur.next.val){
          cur.next=cur.next.next;
      }else{
        // 循环链表
         cur= cur.next;
      }
     
  }
  return head;
};
复制代码

注意点:

  • 1.链表问题一定要考虑边界问题,这是重点中的重点,细节决定成败
  • 2.一定要设置一个cur等于head或者dummy节点(我们自己设置的假节点)
  • 3.链表题一定一定要画图,画图让你的效率提高很多
  • 4.一定要把思路写下来,可能才开始觉得慢,后面就会越来越快啦

总结

链表问题其实并不容易掌握,想要写的得心应手,必须要多加练习。

学习数据结构与算法切忌心浮气躁,要慢慢的来,算法题是培养我们思维的,你要能从每道题里面学到了什么思维,而不是只在乎数量。

明天我们继续加油⛽️ヾ(◍°∇°◍)ノ゙

Guess you like

Origin juejin.im/post/7061955160368480269