【前端算法每日一题】leetcode-剑指Offer8. 删除链表的节点

132 阅读1分钟

题目描述

  • 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
  • 返回删除后的链表的头节点。

解题思路

  • 双指针
  • 一个后驱指针遍历链表
  • 一个前驱指针记录最终结果

解题代码解读

因为题目说明只有一个要删除的节点,所以当循环退出的时候,直接将前驱指针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;
};