劍指offer面試常考手擼演算法題-鍊錶篇
1. 從頭到尾列印鍊錶
1class
solution ;
8 vectorres;
9 stacks;
10while(head !=nullptr)
1115
while(!s.empty())
1620
return
res;21}
22//
可以直接插入vector中,翻轉vector
23//
24 vector printlistfromtailtohead(listnode*head) ;
28while
(head)
2933
reverse(res.begin(), res.end());
34return
res;35}
36 };
2. 鍊錶中倒數第k個節點
1class
solution
15while(p->next !=nullptr)
1620
return
plisthead;21}
22 };
3. 翻轉鍊錶
1class
solution
13while(p !=nullptr)
1419
return
q;20
}21 };
1class
solution
19return
res;20}
21 };
4. 合併兩個排序鍊錶
1class
solution
21else
2227}28
if(phead1 !=nullptr)
29 head->next =phead1;
30else
31 head->next =phead2;
32return res->next;33}
34//
遞迴版本
35 listnode* merge(listnode* phead1, listnode*phead2)
3648
else
4953
return
head;54}
55 };
5. 兩個鍊錶第乙個公共節點
9class
solution );
24 phead1 = phead1->next;25}
26while(phead2 !=nullptr)
2733
return
nullptr;34}
35 };
6. 鍊錶中環的入口節點(快2滿1指標判斷成環,再走一圈計算環長,快慢指標找到入口)
判斷鍊錶是否成環(快慢指標解決)
1/*2struct listnode 8};
9*/10class
solution
28 auto q =phead;
29//
後指標先走環長
30while(looplen--)
3134
//快慢一起走
35 p =phead;
36while(p !=q)
3741
return
p;42}43
//判斷是否成環,快指標走兩步-慢指標走一步,指標相遇必在環內
44 listnode* judgeloop(listnode*phead)
4561
return
nullptr;62}
63 };
7. 刪除鍊錶重複節點(重複保留乙個)
1class
solution
19 pre =cur;
20 cur = cur->next;21}
22return
phead;23}
24 };
8. 刪除鍊錶重複節點(重複節點不保留)
1class
solution
22else
2327}28
return first->next;29}
30 };
9. 判斷兩個鍊錶是否交叉
(同樣可使用乙個unordered_map來儲存乙個鍊錶中的節點指標,再遍歷另外乙個鍊錶逐個查詢)
1bool findfirstcommonnode( listnode* phead1, listnode*phead2) );
8 phead1 = phead1->next;9}
10while(phead2 !=nullptr)
1117
return
false
;18 }
說明:以上前8個題**由牛客oj通過,第9個未測試。
the end.
劍指offer 鍊錶相關問題總結
首先統一鍊錶的資料結構為 struct listnode 題目一 從尾到頭列印鍊錶 輸入乙個鍊錶。從尾到頭列印鍊錶每乙個節點的值。分析 難點在於鍊錶僅僅有指向後繼的指標,沒有指向前驅的指標。轉換思路。結合棧後進先出的特點,能夠遍歷鍊錶,依次將資料元素存入棧中,然後再依次出棧,即為從尾到頭的順序。ve...
劍指offer 鍊錶相關 刪除value值節點
include include include struct listnode listnode createlink int a,int k else return head 從頭到尾列印列表 void printlink listnode phead coutelse else 書上的 void...
(4)劍指Offer之鍊錶相關程式設計題
題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點 問題分析 一句話概括 兩個指標乙個指標p1先開始跑,指標p1跑到k 1個節點後,另乙個節點p2開始跑,當p1跑到最後時,p2所指的指標就是倒數第k個節點。思想的簡單理解 前提假設 鍊錶的結點個數 長度 為n。規律一 要找到倒數第k個結點,需要向前走...