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
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人