删除链表的倒数第 N 个结点

题目描述

  1. 题目地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
  2. 题目要求:
    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

解题思路

  1. 先后指针:
    快指针先走n-1步后慢指针再开始从头节点开始走。当快指针走到最后一个结点的 时候,慢指针就走到了倒数第N个结点。
  2. 定义fast和slow两个指针

解题代码

// 先指针先走n-1步
var removeNthFromEnd = function(head, n) {
  let fast = head;
  for(let i=1; i<=n-1; i++) {
    fast = fast.next;
  }
  let slow = head;
  // 缓存要删除结点的前一个结点
  let pre = null;
  while(fast.next) {
    pre = slow;
    fast = fast.next;
    slow = slow.next;
  }
  // 如果要删除的结点是第一个结点的话,则直接返回slow.next
  if(pre === null) {
    return slow.next;
  }
  else {
    pre.next = slow.next;
  }
  return head;

}
posted @ 2022-08-15 22:30  fionna  阅读(12)  评论(0编辑  收藏  举报