206. 反轉鏈表
阿新 • • 發佈:2019-04-01
下一個 情況 new 方法 進階 指針 class rec ron
問題描述
反轉一個單鏈表。
示例:
輸入: 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
206. 反轉鏈表