劍指offer 24 反轉鍊錶 題解

2021-10-06 20:51:38 字數 1212 閱讀 8238

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。

三指標法:定義3個指標,分別指向當前遍歷到的結點、它的前乙個結點及後乙個結點。在遍歷過程中,首先記錄當前節點的後乙個節點,然後將當前節點的後乙個節點指向前乙個節點,其次前乙個節點再指向當前節點,最後再將當前節點指向最初記錄的後乙個節點,依次處理,直到當前節點的後乙個節點為null時,則代表當前節點時反轉後的頭結點了。整個過程只需遍歷鍊錶一次。

/*

public class listnode

}*/public

class

solution

listnode newhead = head;

listnode pnode = head;

listnode prenode =

null

;while

(pnode!=

null

) pnode.next = prenode;

prenode = pnode;

pnode = tempnode;

}return newhead;

}}

用遞迴的話同樣可以實現反轉鍊錶的功能,不多贅述,**如下:

/*

public class listnode

}*/public

class

solution

listnode newnode = head;

listnode temp = head.next;

//儲存下乙個節點

newnode =

reverselist

(head.next)

; temp.next = head;

//連上頭與遞迴部分

head.next =

null

;//調整尾部

return newnode;

}}

上面的**存在3處魯棒性問題:

•輸入的鍊錶為空或整個鍊錶只有乙個節點時,程式立即崩潰。

•反轉後的鍊錶斷裂。

•返回的反轉之後的頭節點不是原始鍊錶的尾節點。

解決:需要在**中加入相應的判斷**。

[1] 《劍指offer(第二版)》 何海濤著

[2]

劍指Offer 24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。例 輸入 1 2 3 4 5 none 輸出 5 4 3 2 1 none 雙指標遍歷鍊錶,將當前節點的next設為前乙個節點。注意儲存當前節點的next來遍歷。時間複雜度 o n 空間複雜度 o 1 def reverse l...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。樣例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null思路 初始化乙個新的頭節點new head,然後用尾插法把原始鍊錶中的結點插入新的頭節點。最後return new head next.acwing 3...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出轉換後的頭結點。首先,從題目中可得知為單鏈表結構,只有指向下乙個元素的指標。而要完成整個鍊錶的反轉則需要將所有next指標進行反轉。定義3個指標,分別指向當前遍歷的節點 它的前乙個節點以及後乙個節點。pnode ppre pre pnode phe...