鏈表面試題(一)

2021-07-13 18:50:52 字數 1376 閱讀 9097

1.刪除無頭鍊錶的非尾結點。

解題思路:因為不知道pos的前乙個結點,所以只能刪除pos的後乙個結點。

首先,把pos下乙個結點的data賦值給pos的data,然後把pos和pos的下下乙個結點連線,最後刪除pos的下乙個結點。

剛開始的鍊錶如下圖所示:

經分析後得到的圖如下:

**如下:

void erasenottail(plinknode pos)       

2.反轉鍊錶

例如:1->2->3->4->5反轉後為5->4->3->2->1

解題思路:讓1的下一結點為空,讓2的指向1,3指向2,一次類推為5->4->3->2->1,在迴圈中實現,最後讓5為頭指標。

第一次迴圈後圖為黑線第二次迴圈後圖為粉線如下所示:

**為:

void reverselist(plinklist plist)     

plist->phead =newhead;

}

3.在當前結點前插入x。

解題思路:先要建立乙個結點,data為x,因為不知道pos的前乙個結點,所以把新節點連線到pos後,然後交換data,就好了。

圖如下所示:在1前插入2,原來是1->3->4最後為2->1->3->4.

void insetfrontnode(plinknode pos,datatype x)    

4.查詢鍊錶的中間結點。

解題思路:在只能遍歷一次的情況下,定義乙個快指標和乙個慢指標,快指標一次走兩步,慢指標一次走一步,同時出發當快指標走到最後乙個結點時,慢指標走到的位置就是中間位置。

plinknode findmidnode(plinklist plist)    

return slow;

}

謝謝!

鏈表面試題(一)

1.反轉乙個單鏈表。public class mysinglelinkedlmpl private int data public node next public node int data 節點類 private node head public mysinglelinkedlmpl publi...

鏈表面試題

不改變鍊錶結構,從尾到頭列印單鏈表 遞迴實現 void printlistrevers recursively plist phead printf d phead data 當鍊表非常長的時候,遞迴實現的會導致函式呼叫層級很深,可能導致呼叫棧溢位。用棧不會出現此類情況,顯然用棧實現 的魯棒性會好一...

鏈表面試題

從尾到頭列印單鏈表 棧 遞迴 從尾到頭列印鍊錶 includevoid printtailtohead listnode head while s.empty 空間複雜度o n void printtailtoheadr listnode head cout data 刪除乙個無頭單鏈表的非尾結點 ...