92. 反转链表 II

92. 反转链表 II

思路:将中间的链表进行反转,然后前后进行连接,需要注意有前结点和没有前结点的情况。

class Solution(object):
   def reverseBetween(self, head, m, n):
       """
      :type head: ListNode
      :type m: int
      :type n: int
      :rtype: ListNode
      """

       pre = dummy = ListNode(0)
       pre.next = head
       for i in range(m-1):
           pre = pre.next
           
       cur = pre.next
       tail = None
       for i in range(n-m+1):
           tmp = cur.next
           cur.next = tail
           tail = cur
           cur = tmp
       
       # 实现反转链表和双边结点的互相连接
       # cur当前是反转链表块的下一个结点,因此将反转链表的末尾结点指向该结点
       pre.next.next = cur
       # tail则为反转链表中的头结点,因此将反转链表的前一个结点指向反转链表的头结点
       pre.next = tail
       
       return dummy.next

posted @ 2017-09-15 18:32  banananana  阅读(134)  评论(0)    收藏  举报