本文首发小呆&小萌的情侣博客,两个前端的学习生活分享小天地,欢迎关注收藏。
前言
今天是小呆刷题的第2天,今天的题目是:力扣(LeetCode)的第83题,删除排序链表中的重复元素
题目要求
给定一个已排序的链表的头
head, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
提示:
- 链表中节点数目在范围
[0, 300]内 -100 <= Node.val <= 100- 题目数据保证链表已经按升序排列
解题思路
由于链表已经按升序排列,所以值相同的两个节点肯定相连。这道题的本质其实与昨天的题一样,只不过数据结构由数组变成了链表。我们依然可以使用双指针算法来解决。
依旧用一张git图来帮助理解代码在循环过程中,及最后的slow.next = null的作用。
/**
* 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) return null // 判断链表的边界值
let fast = head, slow = head
while(fast !== null) {
if(fast.val !== slow.val) {
slow.next = fast //
slow = slow.next
}
fast = fast.next
}
slow.next = null
return head
}
由于JavaScript自带垃圾回收机制,会自动回收那些未被引用的链表节点,所以我们无需对它们进行额外的操作来释放内存。
小结
依旧是一道easy难度的题,但是有了昨天的经验,这道题我马上就有了思路,只需要实现代码即可。水滴石穿,坚持下去才能有所收货,加油!