19. 删除链表的倒数第 N 个结点(中)

题目

  • 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

python

法一、循环

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        # Step 1: 获取链表长度
        length = 0
        cur = head
        while cur != None:
            length += 1
            cur = cur.next

        # 处理删除头节点的情况
        if length == n:
            return head.next

        # Step 2: 找到倒数第 N 个节点的前一个节点
        cur = head
        for _ in range(length - n - 1):
            cur = cur.next

        # Step 3: 删除节点,并重新连接
        cur.next = cur.next.next
        return head
  • for _ in range(length - n - 1):下划线 _ 是一个通用的变量名,通常用于表示一个临时或不需要使用的变量。在循环中,它表示一个占位符,用于表示我们不需要使用循环变量的值。

法二、快慢指针

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        # 初始化快慢指针
        slow = head
        fast = head
        # 将快指针向前移动 n 步
        for _ in range(n):
            fast = fast.next
        # 处理删除头节点的情况
        if fast is None:
            return head.next
        # 同时移动快慢指针,直到快指针到达链表末尾
        while fast.next != None:
            slow = slow.next
            fast = fast.next
        # 删除倒数第 N 个节点
        slow.next = slow.next.next
        return head 

javascript

双指针

class Solution:
    var removeNthFromEnd = function(head, n) {
    let dummy = { next: head }
    let del = dummy, tail = dummy
    while(n!=0){
        tail = tail.next
        n--
    }
    while (tail.next){
        tail = tail.next
        del = del.next
    }
    del.next = del.next.next
    return dummy.next
};
posted @   Frommoon  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示