前言
掘金团队号上线,助你 Offer 临门! 点击 查看详情
题目描述
解题思路
- 参数的head指的是链表的头指针。
- val指的是目标number
- 首先判断要删除的是不是第一个头节点,如果是头节点,直接让头指针指向下一个节点,然后返回。
- 如果不是头节点,首先使用临时指针记录这个头指针的位置,让临时指针往后遍历,头指针不要移动了。
- 使用while循环进行遍历,当临时指针的next节点的值等于要删除的节点,那么让临时指针的next指向临时指针的next的next。
- 因为head指向的是引用型变量,临时指针修改也会影响到head的,所以最后返回head即是我们要返回的头指针。
解题代码
var deleteNode = function (head, val) {
// 这里的head指的不是链表,而是链表的头指针
// 如果删除的是头节点的话,直接返回头节点的下一个节点
if(head.val === val) {
return head.next;
};
// 如果函数走到这里说明删除的不是头节点
// 用临时变量记录头指针
let node = head;
while(node.next.val !== val) {
node = node.next;
}
node.next = node.next.next;
return head;
};
总结
- 本题属于链表的考题。
- 本题核心思路在于复制目标节点的值,然后指针跳过该节点。