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中链表的表示方式,以及熟悉循环,递归和双指针在本体中的使用

 
posted @   是冰美式诶  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示