给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/
解题思路:
定义快慢指针fast和slow,让fast先走n+1步,然后两个指针同时前进直到fast==None,此时,slow所指向的就是倒数第n个结点的前缀结点,然后前判断k<=n是否成立,若是,则说明要删除的其实是第一个结点。
这样只需遍历一次链表即可。
我的代码:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
fast = head
slow = head
k = 0
while fast:
if k <= n:
k += 1
else:
slow = slow.next
fast = fast.next
if k <= n:
return head.next
slow.next = slow.next.next
return head
Time: O(N)
Space: O(1)