Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
参考:
http://bookshadow.com/weblog/2015/01/29/leetcode-reverse-linked-list-ii/
# 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
"""
dum=ListNode(0)
h1=dum
#if head is None or head.next is None:
#return head
#h2=head
p=head
l=n-m+1
while m-1 !=0:
h1.next=p #--当m!=1时,第一次h1.next=p可以使dum.next=head,在最后返回dum.next时就是head
h1=p #h1最后为m的上一个节点
p=p.next
#h2=p #--h2最后为m, 放在local无效
m-=1
h2=p #--h2最后为m
last=None
next=None
while l!=0:
next=p.next #next最后为n的下一个节点
p.next=last
last=p
p=next
l-=1
h1.next=last
h2.next=next
return dum.next #返回最终的head