《劍指offer》面試題11 反轉鍊錶

2022-01-12 16:41:46 字數 1160 閱讀 2018

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

這個題目的題意其實非常簡單,最開始我們的鍊錶的指向是這樣的:

將其改變反向,變成如下所示的方向即可:

可以看到最開始我們的表頭指向了none,然後表尾卻指向了倒數第二個鍊錶,中間的鍊錶指向全部反向,這也就是這個題目要讓我們幹的事情。那麼我們如何實現這個鍊錶的反轉呢?

首先我們開闢出乙個新的空間nextnode,用於裝載還沒有實現鍊錶反轉的部分,剩餘的空間prenode用於裝載已經反轉的部分,**如下所示:

class

solution:

#返回listnode,到底要讓我返回啥?返回的是新鍊錶的表頭,這個鍊錶當中的所有指向已經全部重新排列。

defreverselist(self, phead):

#write code here、

prenode=none

while

phead:

nextnode = phead.next#

指向下乙個記憶體空間

phead.next = prenode#

更換指標的指向為前乙個記憶體空間

prenode=phead#

把當前節點從none變成phead,

phead=nextnode

return

prenode

假設我們在做第一步的時候如下圖所示:

我們先拿掉phead當中的表頭,將其指向prenode也就是none,這樣拿掉的這個表頭以及已經具備新的指向的表頭用prenode來儲存,剩下的nextnode變成新的phead,進入到下一步重新進行這個迴圈。新的迴圈依然拿掉新的phead的表頭將其變換指向後灌入prenode當中,從此往復,就會將整個鍊錶的指向全部反轉了。如下圖所示:

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...

劍指offer 面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

劍指Offer面試題16 反轉鍊錶

反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...