给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
# 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
"""
# 空链表的情况下
if head is None:
return head
# 只有一个节点并且要删除的就是这个节点
elif head.next is None:
if n>=1:
return None
# 大于等于两个节点的情况
else:
slow = head
fast = head
pre = slow
i = 0
# 快、慢两个指针,先让快指针前移n个节点
while i < n and fast is not None:
fast = fast.next
i += 1
while fast is not None:
pre = slow
slow = slow.next
fast = fast.next
# 判断要删除的是否是头节点
if slow is head:
head = pre.next
else:
pre.next = slow.next
return head