leetcode[19]删除链表的倒数第N个节点 python3实现(经典快慢指针+虚节点)

# 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 
# 
#  示例: 
# 
#  给定一个链表: 1->2->3->4->5, 和 n = 2.
# 
# 当删除了倒数第二个节点后,链表变为 1->2->3->5.
#  
# 
#  说明: 
# 
#  给定的 n 保证是有效的。 
# 
#  进阶: 
# 
#  你能尝试使用一趟扫描实现吗? 
#  Related Topics 链表 双指针 
#   1063  0

# leetcode submit region begin(Prohibit modification and deletion)
# 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) # dummy node
        pre = dummy
        post = head
        # 找出倒数第n个节点的前趋节点
        for i in range(n):
            post = post.next
        while post:
            post = post.next
            pre = pre.next
        pre.next = pre.next.next
        return dummy.next
# leetcode submit region end(Prohibit modification and deletion)

使用快慢指针定位到倒数第n个节点的前趋节点pre,修改pre的next指针即可完成删除动作。

为了统一操作,在head前加入了虚节点,最后返回虚节点的next即可。

你可能感兴趣的:(LeetCode,链表,指针,定位,单链表,leetcode)