题目
给你一个链表的头节点
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; };