Reverse Linked List II
Problem: Reverse Linked List II
I use a dummy solution to find the two nodes whether targeted linked list is wrapped and cut it out for reversion. A better solution is to reverse the linked list as soon as we find head of target and stop reversing at tail of target.
Code in Python:
# 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
"""
dummy = ListNode(0)
dummy.next = head
prev, node = dummy, head
i = 0
l, r, lp = None, None, None
while i != n and node:
if i == m-1: prev.next, l, lp = None, node, prev
prev, node = node, node.next
i += 1
prev.next, r = None, node
p = None
node = l
while node:
tmp = node.next
node.next, p, node = p, node, tmp
lp.next, l.next = p, r
return dummy.next