19. 删除链表的倒数第N个节点

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

posted @ 2019-03-26 06:28  banananana  阅读(...)  评论(... 编辑 收藏