删除链表倒数第n个元素

在这里插入图片描述
第一想法就是双指针
一次遍历。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        l1,l2=head,head
        for i in range(n):
            l2=l2.next
        if  not l2:
            return head.next
        while True:
            if l2.next:
                l1,l2=l1.next,l2.next
            else:
                l1.next=l1.next.next
                return head                                

在这里插入图片描述
后来看题解竟然有大佬用递归
递归返回其是第几个节点
在递归过程中通过判断是第几个节点来删除节点

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        def removeNode(node,n):
            if node.next:
                m=removeNode(node.next,n)
                if m==n:
                    node.next=node.next.next
                return m+1
            else:
                return 1       
        a=head.next if removeNode(head,n)==n else head
        return a         

在这里插入图片描述

发布了91 篇原创文章 · 获赞 0 · 访问量 1311

猜你喜欢

转载自blog.csdn.net/weixin_45569078/article/details/104784607