206. 反轉連結串列

weixin_30639719發表於2020-04-05

問題描述

反轉一個單連結串列。

示例:

輸入: 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

轉載於:https://www.cnblogs.com/huang-yc/p/10634029.html

相關文章