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

Posted 我家大宝最可爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归:删除链表的倒数第 N 个结点相关的知识,希望对你有一定的参考价值。

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

链表的递归我感觉更像是递归遍历,不通过for循环操作进行遍历,直接使用递归的原理进行遍历,再删除倒数第N个节点的时候,通过递归会顺向遍历到尾部,然后再从下往上返回,这个时候我们就可以计数了,记到第N+1个的时候,我们可以进行操作。

这其中有两个小技巧,一个是定义一个dummy的节点放到head的前面,这样如果要删除head的结点依然可以返回dummy.next,第二个是使用nonlocal这个关键字,这个关键字定义了内部函数可以操作函数以外的变量。

# 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:
        dummy = ListNode(0,head)
        def dfs(head):
            nonlocal n
            if head is None:
                return
            dfs(head.next) # 之前不需要任何处理,一直到末尾元素,并且不需要返回

            n -= 1
            if n == -1:
                head.next = head.next.next
        
        dfs(dummy)
        return dummy.next


以上是关于递归:删除链表的倒数第 N 个结点的主要内容,如果未能解决你的问题,请参考以下文章

刷题12: 删除链表的倒数第 N 个结点

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

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

19. 删除链表的倒数第 N 个结点(先后指针)

19. 删除链表的倒数第 N 个结点(先后指针)

LeetCode 19.删除链表的倒数第N个节点