python单链表反转
1.迭代的方式
def reverse(self, head):
if head is None or head.next is None:
return head
cur = head
pre = None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre`
2.递归的方式(面试一般问这种)
def reverse2(self, head):
# base case
if head is None or head.next is None:
return head
cur = self.reverse2(head.next) # 整个过程中cur是固定不变的,一直指向链表的尾节点,也就是新链表的头节点。然后递归是从下一个开始的。
head.next.next = head # 表示让head的下一个指向head
head.next = None # 断开之前的指向,防止循环递归
return cur