代码如下:
class ListNode():
def __init__(self,x):
self.val =x
self.next = None
def printNode(head):
curr=head
while curr is not None:
print(curr.val,end=' -> ')
curr=curr.next
print("None")
def reserse(head):
if head is None:
return
temp = head.next
prev = None
curr = head
while curr is not None:
temp = curr.next
curr.next = prev
prev = curr
curr = temp
return prev
def reserseBetween(head, m, n):
def reverse(root, prep, k):
curr = root
prev = None
temp = None
while curr is not None and k>0:
temp = curr.next
curr.next = prev
prev = curr
curr= temp
k -=1
root.next= temp
prep.next= prev
return prev
dummy = ListNode(-1)
dummy.next = head
k = 0
p = dummy
start = None
while p is not None:
if k==m:
start = p
if k==n+1:
reverse(start.next, start, n-m+1)
return dummy.next
k +=1
p=p.next
def n_reverse(head, start_pos, n, repeat=True):
def reverse(root, prep, k):
curr = root
prev = None
temp = None
while curr is not None and k>0:
temp = curr.next
curr.next = prev
prev = curr
curr= temp
k -=1
root.next= temp
prep.next= prev
return root
if start_pos <1:
raise ValueError("Start position should be greater than 0")
dummy = ListNode(-1)
dummy.next = head
k = 0
p = dummy
start = None
while p is not None:
if k == start_pos:
start = p
if k > 1 and k%n==1:
start = reverse(start.next, start, n)
if not repeat:
return dummy.next
k +=1
p=p.next
return dummy.next
def reverse2(head):
if head.next is None : return head#or head.next==None:
result = reverse(head.next)
#printNode(result)
head.next.next = head
head.next = None
return result
n=10
l0=ListNode(0)
for i in range(1,n):
exec(f"l{i}=ListNode({i})")
exec(f"l{i-1}.next=l{i}")
printNode(l0)
printNode(reverse(l0))