题目描述
- 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
- 返回删除后的链表的头节点。
解题思路
- 双指针
- 一个后驱指针遍历链表
- 一个前驱指针记录最终结果
解题代码解读
因为题目说明只有一个要删除的节点,所以当循环退出的时候,直接将前驱指针pre指向后驱指针cur的下一个节点即可,当循环进行的时候,后驱指针cur向后移动,前驱指针pre向后移动
解题代码(JavaScript)
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var deleteNode = function (head, val) {
if (head.val === val) return head.next;
let pre = head;
let cur = head.next;
while (cur && cur.val !== val) {
pre.next = cur;
pre = cur;
cur = cur.next;
}
pre.next = cur.next;
return head;
};