题目:19. 删除链表的倒数第N个节点
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?
解题:
1、删除节点,得分两种情况进行处理:头结点和普通节点。
代码:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
fast = head
while n > 0:
fast = fast.next
n -= 1
# 头结点
node = ListNode(0)
node.next = head
head = node
slow = head
while fast:
fast = fast.next
slow = slow.next
node = slow.next
slow.next = slow.next.next
del node
return head.next