鏈表面試題彙總

2021-08-19 13:51:16 字數 754 閱讀 5518

——單鏈表反轉(兩種)(劍指offer,題16)

順序的ok

遞迴的nok

——查詢單鏈表中的中間結點

兩個指標,乙個走一步,乙個走2步,走2步的那個null,則停止

ok——

查詢單鏈表中的倒數第k個結點(劍指offer,題15)  

兩個指標 ,乙個先走,再同時走,先走的那個null了,則停止

ok——合併兩個有序的單鏈表,合併之後的鍊錶依然有序【出現頻率高】(劍指offer,題17)

遞迴[cpp] 

view plain

copy

node *listmerge1(node *head1,node *head2)

//採用遞迴的方法實現

else

return

head;  

}  ok

——從尾到頭列印單鏈表(劍指offer,題5)

遞迴 、棧

ok——判斷兩個單鏈表相交的第乙個交點(劍指offer,題37)

a b兩個鍊錶,長的先走 delta length 步,然後共同走,且判斷指標是否相同,相同者既是

ok——判斷兩個鍊錶是否相交

直接看最後乙個節點 o(m+n)

ok——給出一單鏈表頭指標phead和一節點指標ptobedeleted,o(1)時間複雜度刪除節點ptobedeleted: delete(劍指offer,題13)

n+1 複製到n,n.next=(n+1).next

ok以上摘自:

單鏈表面試題彙總(1)

逆序列印單鏈表 void ptinttailtohead slistnode phead 刪除乙個無頭結點的非尾節點 void deletenottail slistnode pos 約瑟夫環 slistnode circle slistnode phead,int k tail cur tail ...

鏈表面試題

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

鏈表面試題

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