問題描述
反轉一個單連結串列。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
進階:
你可以迭代或遞迴地反轉連結串列。你能否用兩種方法解決這道題?
解決方案
1.迭代法
def reverse_loop(head):
"""
循壞迭代
:param head:
:return:
"""
if not head or not head.next:
return head
pre = None
while head:
next = head.next # 快取當前節點的向後指標,待下次迭代用
head.next = pre # 這一步是反轉的關鍵,相當於把當前的向前指標作為當前節點的向後指標
pre = head # 作為下次迭代時的(當前節點的)向前指標
head = next # 作為下次迭代時的(當前)節點
return pre # 返回頭指標,頭指標就是迭代到最後一次時的head變數(賦值給了pre)
2.遞迴法
def reverse_recursion(head):
"""
遞迴法
基準條件是將前置節點的下一位替換成自己,並將自己的下一個節點置空
:param head:
:return:
"""
if not head or not head.next: # 處理邊界情況
return head
new_head = reverse_recursion(head.next)
head.next.next = head
head.next = None
return new_head