单链表反转,可以使用 循环、递归 两种方式
- 循环方式
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def non_recurse(head):
if head is None or head.next is None:
return head
prev = None
cur = head
new_head = head
while cur:
new_head = cur
tmp = cur.next
cur.next = prev
prev = cur
cur = tmp
return new_head
head = ListNode(1)
p1 = ListNode(2)
p2 = ListNode(3)
p3 = ListNode(4)
head.next = p1
p1.next = p2
p2.next = p3
p = non_recurse(head)
while p:
print(p.val)
p = p.next
- 递归方式
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def recurse(head, new_head):
if head is None:
return
if head.next is None:
new_head = head
else:
new_head = recurse(head.next, new_head)
head.next.next = head
head.next = None
return new_head
head = ListNode(1)
p1 = ListNode(2)
p2 = ListNode(3)
p3 = ListNode(4)
head.next = p1
p1.next = p2
p2.next = p3
new_head = None
p = recurse(head, new_head)
while p:
print(p.val)
p = p.next