题目内容
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
Given a linked list, remove the n-th node from the end of list and return its head.
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
Example:
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 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 not head:
return False
if not n:
return head
slow,fast=head,head
for i in range(n):
fast=fast.next
if not fast:
return head.next
while fast.next:
slow=slow.next
fast=fast.next
slow.next=slow.next.next
return head