NO.19删除链表的倒数第N个节点
#循环迭代 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: if not head : return [] #设置虚拟节点dummy,指向ListNode(0),并将dummy.next连接在head dummy = ListNode(0) dummy.next = head cur=head #初始化cur length=0 #计算ListNode的长度,利用cur=cur.next进行遍历 while cur: length+=1 cur=cur.next #找到倒数第n个的节点的前面的那一个点 cur =dummy # 重新赋初点 len = 0 #记录长度 cur = dummy for _ in range(length - n): cur = cur.next #删除节点,再连接 cur.next = cur.next.next return dummy.next
#快慢指针-到达节点的前一 class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: if not head : return [] dummy = ListNode(0) dummy.next = head #同法一 fast,slow = dummy,dummy#设置快慢指针 #先让快指针先走n步(很妙嗷) i = 0 while i <n: i+=1 fast = fast.next #此时fast离尾节点还有l-n,slow离倒数第n个节点还有l-n,恰好开始同时进行 #结果是fast到达尾,slow到达前一节点 while fast and fast.next: fast,slow = fast.next,slow.next #删除此节点,重新连接 slow.next = slow.next.next return dummy.next
#回溯 class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: if not head: self.count = 0 return head #简单判断 head.next = self.removeNthFromEnd(head.next, n) # 递归调用 self.count += 1 # 回溯时进行节点计数 return head.next if self.count == n else head
主要学习在python中链表的表示方式,以及熟悉循环,递归和双指针在本体中的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)