LeetCode反转链表II

LeetCode反转链表II

题目链接地址

  • 解题思路

    1->2->3->4->5->NULL

    分解成

    1->NULL 2->3->4->NULL 5->NULL

    然后对中间进行反转

    算法的复杂度很小,性能很号

    别看代码很长,其实很简单!

  • python代码

    
    # Definition for singly-linked list.
    
    
    # class ListNode(object):
    
    
    #     def __init__(self, x):
    
    
    #         self.val = x
    
    
    #         self.next = None
    
    
    class Solution(object):
      def reverse(self, head):
          stack = []
          temp = head
          while temp != None:
              stack.append(temp)
              temp = temp.next
    
          start, end = None, None
    
          while len(stack) > 0:
              value = stack.pop()
              if end == None:
                  start, end = value, value
              else:
                  end.next = value
                  end = value
    
          end.next = None
          return start, end
    
      def reverseBetween(self, head, m, n):
          """
          :type head: ListNode
          :type m: int
          :type n: int
          :rtype: ListNode
          """
          if head == None or head.next == None:
              return head
    
          #找到关键element,一共四个
          temp, number = head, 0
    
          startOne, startTwo, endOne, endTwo = None, None, None, None
    
          while temp != None:
              number += 1
    
              if number == m-1:
                  startOne = temp
    
              if number == m:
                  startTwo = temp
    
              if number == n:
                  endOne = temp
    
              if number == n+1:
                  endTwo = temp
    
              temp = temp.next        
    
          endOne.next = None
    
          startTwo, endOne = self.reverse(startTwo)
    
          #print startOne.val, startTwo.val, endOne.val, endTwo.val
    
          if startOne != None: 
              startOne.next = startTwo
              endOne.next = endTwo
              return head
          else:
              endOne.next = endTwo
              return startTwo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值