递归:删除链表的倒数第 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 个结点的主要内容,如果未能解决你的问题,请参考以下文章