题目
反转链表
在代码的鲁棒性上需要注意:
输入的头指针为空指针
输入的链表只有一个节点
一、思路一
就地反转
设计一个临时变量:反转后的头节点,now_head
设计一个指针指向当前的头节点,p1
每次反转当前节点的下个节点,直到尾节点。
当前指针还有下一个节点,则将当前节点的下一个节点摘除,保存当前节点的下一个节点指向的节点到tmp变量
当前节点的下一个节点成为新的头节点now_head,先指向当前的头节点,在将头节点重新赋值。
将当前的节点的下一个节点设置为tmp变量。
需要注意的是:
尾节点的处理。当指针p1的next节点为6的时候,则p1没有next.next节点,此时已经反转到了最后一个节点。应该把尾节点摘除后放置新的头节点,p1的next置为null。
def reverlist(head):
if not head:
return None
now_head = head
p1 = head
while p1.next:
tmp = p1.next.next
if tmp:
p1.next.next = now_head
now_head = p1.next
p1.next = tmp
else:
# z最后一个节点
tmp = p1.next
p1.next = None
tmp.next = now_head
now_head = tmp
return now_head
二、思路二
递归反转