美文网首页
删除链表的倒数第n个节点

删除链表的倒数第n个节点

作者: dalewong | 来源:发表于2021-09-28 11:54 被阅读0次

    链表删除节点是一道经典的面试题,
    主要解体的思路为双指针,
    指针a先运动n次next,
    然后b指针和a指针一起运动,直到到达tail
    这里主要需要关注几点到corner case:

    1. 如果链表为空
    2. 如果删除的是第一个节点
    3. 如果只有一个节点
    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution(object):
        def removeNthFromEnd(self, head, n):
            """
            :type head: ListNode
            :type n: int
            :rtype: ListNode
            """
            # 为空
            if not head:
                return 
            # 只有一个节点
            if not head.next:
                return 
    
            del_pre = head
            for i in range(n):
                del_pre = del_pre.next
            
            # 如果删除的是第一个节点
            if not del_pre:
                head = head.next
                return head
    
            pre = head
            while del_pre and del_pre.next:
                pre = pre.next
                del_pre = del_pre.next
            last = pre.next.next
            pre.next = last
            return head
    

    相关文章

      网友评论

          本文标题:删除链表的倒数第n个节点

          本文链接:https://www.haomeiwen.com/subject/aznlnltx.html