欢乐力扣:删除链表的倒数第n个节点

文章目录

  • 1、题目描述
  • 2、思路


1、题目描述

 删除链表的倒数第n个节点。
 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
欢乐力扣:删除链表的倒数第n个节点_第1张图片

2、思路

 参考官方题解,基本思路是:首先获取链表总长度,然后遍历到待删除节点的前一个位置,然后调整节点指向即可。

# 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: Optional[ListNode], n: int) -> Optional[ListNode]:
        # 获取链表长度
        pre = head 
        length = 0
        while pre:
            pre = pre.next 
            length += 1 
        # 哨兵节点:否则当链表长度为1时,不通过;
        dummy_node = ListNode()
        dummy_node.next = head 
        # 遍历到 length - n 个的前一个
        pre = dummy_node 
        for i in range(0, length - n):
            pre = pre.next 
        # 更改指针
        pre.next = pre.next.next  
        return dummy_node.next   


你可能感兴趣的:(欢乐力扣,leetcode,链表,算法)