#Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
if not head or not head.next:
return head
if n < 1 or m >= n :
return head
cout = 1
cur = head
# 还是边界条件没考虑完全呀,比如翻转整个链表
preStart = None
nextEnd = None
while cur:
cur = cur.next
cout += 1
if cout == m-1:
preStart = cur
if cout == n:
nextEnd = cur.next
break
start = preStart.next
begin = start.next
for i in range(m-n):
nextBegin = begin.next
begin.next = preStart.next
preStart.next = begin
begin = nextBegin
start.next = nextEnd
return head
class Solution2(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
count = 1
root = ListNode(0)
root.next = head
pre = root
# while pre.next:
#
# pre = pre.next
# count += 1
#
# if count == m :
# break
while pre.next and count < m :
pre = pre.next
count += 1
if not pre:
return head
mNode = pre.next
cur = mNode.next
while cur and count < n:
next = cur.next
cur.next = pre.next
pre.next = cur
mNode.next = next
cur = next
count += 1
return root.next