【チェーンテーブル】チェーンテーブルを反転~まだ読めません

3413 ワード

テーマ:関数を定義し、チェーンテーブルのヘッダノードを入力し、チェーンテーブルを反転し、反転後のチェーンテーブルのヘッダノードを出力します.
例:
入力:1->2->3->4->5->NULL出力:5->4->3->2->1->NULL
制限:
0<=ノード数<=5000
考え方:
構想一:外部空間を利用する
新しいリストを作成し、チェーンテーブルを巡回しながらチェーンテーブルをリストに格納し、popを使用してチェーンテーブルを後ろから前にポップアップし、チェーンテーブルを反転させる目的を達成します.
class Solution:
    def reverseList(self, head):
        if not head:
            return None
        res = []
        #    ,             
        while head.next:
            res.append(head)
            head = head.next
        #   head          
        #      temp       ,            ,    pop  
        temp = head
        #         ,        
        while res:
            node = res.pop()
            node.next = temp.next
            temp.next = node
            temp = node
        return head

方法2:
構想:2つのポインタを申請し、最初のポインタはpreと呼ばれ、最初はnullを指していた.2番目のポインタcurはheadを指し、その後curを繰り返します.curに反復するたびに、curのnextがpreを指し、preとcurが1ビット前進する.反復が完了し(curがnullになった)、preが最後のノードになります.アニメーションのプレゼンテーションは次のとおりです.
class Solution(object):
	def reverseList(self, head):
        if not head:
            return
        #                             
        pre_node = None
        cur_node = head

        #       
        while cur_node:
            #                  ,       next         
            #                         
            tmp = cur_node.next
            #               ,           ,  next       
            cur_node.next = pre_node
            #         ,            
            pre_node = cur_node
            cur_node = tmp
        
        return pre_node