19. 删除链表的倒数第N个节点
题意
删除链表的倒数第N个结点
解题思路
先让快结点移动n个位置,接着再让慢结点和快结点同时移动,发现出慢结点就是要删除的结点,将前结点指向删除结点的下一个结点即可;
实现
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
执行用时 : 36 ms, 在Remove Nth Node From End of List的Python提交中击败了12.60% 的用户
内存消耗 : 11.7 MB, 在Remove Nth Node From End of List的Python提交中击败了0.91% 的用户
:type head: ListNode
:type n: int
:rtype: ListNode
"""
slow = fast = head
# 因为题目说明了n是个正常值,也就是肯定会是[1, len(head)]
# 加个异常捕获,如果链表长度不够n,则直接返回头结点
try:
while n:
fast = fast.next
n -= 1
except:
return head
# 如果快结点为空,说明肯定是要删除倒数第len(head)个结点,也就是头结点
if not fast:
return head.next
prev = slow
while slow and fast:
prev = slow
slow = slow.next
fast = fast.next
prev.next = slow.next
return head