輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。
這個題目的題意其實非常簡單,最開始我們的鍊錶的指向是這樣的:
將其改變反向,變成如下所示的方向即可:
可以看到最開始我們的表頭指向了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節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...