开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
题目
给你一个链表的头节点
head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回 新的头节点 。
输入: head = [1,2,6,3,4,5,6], val = 6
输出: [1,2,3,4,5]
思路一
这里我们先使用递归进行实现,首先我们进入函数之后先判断当前head是否为null,如果是则直接返回null,如果不为空则往下执行,接下来我们声明一个res变量,用于存储递归调用自身removeElements函数的返回值,我们调用removeElements函数时,将当前的head的next参数和形参val传递进去,然后使用if判断head的val属性是否等于当前的val形参,如果两者相等,则直接将当前的res变量值返回出去即可,如果不相等,则把res变量值赋值给head的next属性,最后在将head返回出去即可
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
if (head === null) {
return null
}
let res = removeElements(head.next, val)
if(head.val === val){
return res;
}else{
head.next = res;
return head;
}
};
思路二
我们这里先考虑边界值,如果传入的节点为空,就返回空,然后生成一个新的头节点,然后让头节点指向原来链表的第一个节点,在声明一个指针,指向头节点,其next节点为原来链表的第一个节点,如果链表不为空,则循环遍历,如果p指针指向的下一个元素等于val,那么就移除此元素,否则p指针后移,最后返回头节点后面的链表
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
if (head === null) {
return null
}
var firstNode = new ListNode();
firstNode.next = head;
var p = firstNode;
while(p.next!=null){
p.next.val == val? p.next = p.next.next: p = p.next;
}
return firstNode.next;
};