1. 程式人生 > >鏈表常見題目--附具體分析和代碼

鏈表常見題目--附具體分析和代碼

一個 復雜 urn 輸入 示例 分析 核心 反向 明顯

一、鏈表的反轉

示例:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

分析:剛開始的時候很自然的想到,創建一個列表,然後遍歷鏈表,將每個節點保存在列表中,然後根據列表,反向構造一個新的鏈表。但是這個很明顯很low,一方面是空間復雜度為O(n),一方面是要遍歷兩遍。後來想都到了另外一種方法,只需要遍歷一遍,然後所需的額外空間也非常少。
核心思想就是:遍歷鏈表,創建一個新節點,保存當前節點的值。一個節點指向None,將第二個元素指向第一個節點,第三個指向第二個,以此類推。
代碼查考如下

def reverseList( head):
        q = head
        f = None
        while q:
            new = ListNode(q.val)
            new.next = f
            f = new
            q = q.next
        return f

鏈表常見題目--附具體分析和代碼