[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 链表 - 移除链表元素, leetcode 203
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:203. Remove Linked List Elements
题目
如下:
Given the
head
of a linked list and an integerval
, remove all the nodes of the linked list that hasNode.val == val
, and return the new head.
解题思路
一般情况下会有这么几种可能性:
-
链表头部出现要去除的数字
假设这里要去除的数字是 1,所有要移除的数字都在链表头部。
-
链表中部出现要去除的数字
假设这里要去除的数字是 2,所有要移除的数字都在链表中部。
只要处理了这两个 special cases,那么剩下的就都不是问题了。
题目中需求说,依旧需要返回一个指向头部的结点,所以这道题也需要声名两个额外的结点指向头部,一个 head
用于遍历,一个 res
用于返回。
完了之后每次遍历 list1
和 list2
时判断当前结点是否需要移除,如果是的话,跳到下一个;如果否,则更新遍历用的节点 head
,让其指向当前结点,随后 head
指向 head.next
。
使用 JavaScript 解题
下面这个是比较平铺直叙地使用循环完成的解法,后面还有一种使用递归的解法。
/**
* Definition for singly-linked list.
* function ListNode(val, next)
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
*
*/
/**
* @param ListNode head
* @param number val
* @return ListNode
*/
var removeElements = function (head, val)
let temp = head;
while (temp && temp.val === val)
temp = temp.next;
const res = temp;
while (temp)
let next = temp.next;
while (next && next.val === val)
next = next.next;
temp.next = next;
temp = temp.next;
return res;
;
这个解法来自:3 line recursive solution
public ListNode removeElements(ListNode head, int val)
if (head == null) return null;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
同类型题
题目地址:83. Remove Duplicates from Sorted List
题目如下:
Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
代码如下:
/**
* 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;
const res = head;
while (head && head.next)
if (head.next.val === head.val)
head.next = head.next.next;
else
head = head.next;
return res;
;
以上是关于[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—203. 移除链表元素(链表)—day02