1. 程式人生 > >206. 反轉鏈表

206. 反轉鏈表

下一個 情況 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. 反轉鏈表