版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、學而不思則惘,思而不學則殆1234567891011121314345678兩個鏈表相交以及第一個公共節(jié)點的問題判讀兩個鏈表是否相交以及如果相交它們的第一個公共節(jié)點的問題,主要分這么幾種情況:1)兩個鏈表均不含有環(huán)2)兩個鏈表均含有環(huán)對于一個有環(huán)一個沒有,那么它們即不相交也沒有公共節(jié)點首先定義節(jié)點的結(jié)構(gòu)1 struct Node2 3 intvalue;4 Node*next;5 ;判斷鏈表是否有環(huán)函數(shù)bool isRingList(Node *head)if(NULL = head)return false;Node *p1 = head, *p2 = p1->next;while(p
2、2 != NULL && p2->next!=NULL) p1 = p1->next;p2 = p2->next->next;if(p1 = p2) return true;return false;1)兩個鏈表均不含有環(huán)1.1)判斷兩個鏈表是否相交對于不含有環(huán)的兩個鏈表只要判斷它們的tail是否相等就可以決定它們是否相交bool isCnnNonRingList(Node *h1, Node *h2) Node *p1, *p2; while(h1 != NULL) p1 = h1;h1 = h1->next; 910111213141516wh
3、ile(h2 != NULL)p2 = h2;h2 = h2->next;return (p1 = p2);1.2)找到它們的第一個公共節(jié)點對于不含有環(huán)的連個鏈表,只要從頭開始縮短長度較長的鏈表的長度知道長度相等,然后 同時移動兩個鏈表,第一個相同節(jié)點即為交點123456789101112131415161718192021222324252627Node* findFirstComNonRingList(Node *h1, Node *h2) if(!isCnnNonRingList(h1, h2) return NULL;Node *p1 = h1, *p2 = h2;intlen1
4、 = NonRingListLen(h1);intlen2 = NonRingListLen(h2);if(len1 < len2)p1 = h2;p2 = h1;len1 = len1 + len2;len2 = len1 - len2;len1 = len1 - len2;while(len1 > len2) p1 = p1->next; len1-; while(p1!=p2 && len1!=0)p1 = p1->next;p2 = p2->next;return p1;2)對于兩個鏈表均還有環(huán)的情況這個問題比較復雜了 -,為了簡單,我還是
5、先給出求它們公共節(jié)點的算法,2.1 )兩個含有環(huán)的鏈表的公共節(jié)點主要思路是,分別求出,兩個含有環(huán)鏈表的環(huán)的入口節(jié)點,如果他們相等則以它們的入口 節(jié)點為tail分別計算兩個鏈表的長度,然后就和無環(huán)鏈表的情況一樣了。1 /找到帶環(huán)鏈表入口節(jié)點函數(shù)2 Node* findEnterRing(Node *head)3 4 判斷,head是否帶環(huán)也不做了 :)5 /這里面涉及到一個運算6 從開始,pl每次走一步,p2每次走兩步,環(huán)的長度r,7 /第一次相遇時,p1走了 s步,p2走了 2s步,則8 /2s = s+n*r ,其中n為p2在環(huán)內(nèi)循環(huán)的次數(shù),那么,起始點到入口點距離為a,9 /入口點到第一次
6、相遇點距離為 x,則10 /a+x=s=n*r;11 /a=(n-1)*r+r-x;12 /通過這里看以看出,從起始點和相遇點,分別每次走一步,那么它們會在環(huán)的入口點相13遇14 那么,就有了如下求出環(huán)入口點的算法15 Node *p1 = head, *p2 = head;16 do17 18 p1 = p1->next;19 p2 = p2->next;20while(p1!=p2);21p2 = head;22while(p1!=p2)2324p1=p1->next;25p2=p2->next;2627returnp1;28 2930313233 Node *fi
7、ndFirstComRingList(Node *h1, Node *h2)34 35 為了簡單,判斷h1,h2是否有環(huán)就不做了吧:)36Node *p1 = findEnterRing(h1);37Node *p2 = findEnterRing(h2);38if(p1 != p2)39return NULL;40int len1 = 1, len2 =1;414243444546474849505152535455565758596061626364656667686970717273747576Node *11 = h1; whi1e(11!=p1) 1en1+;11= l1->n
8、ext;Node *l2 = h2;while(l2!=p2)len2+;l2 = l2->next;11 = h1;12 = h2;if(len1 < len2) l1=h2;l2=h1;len1 = len1+len2; len2 = len1-len2; len1 = len1-len2;while(len1 > len2)l1 = l1->next; len1-;while(l1!=l2 && len1!=0) l1=l1->next; l2=l2->next; len1-;return l1;2.2)兩個帶環(huán)鏈表相交的問題也分兩種情況吧情況1 :這里貼不了圖,可能是瀏覽器的問題=就用簡圖吧如果它們的它們的環(huán)的入口節(jié)點相同,那么可以,分別找到它們的環(huán)的入口節(jié)點判斷是否相等,如果相等則相交,不相等則不想交情況2:對于相交但是如果節(jié)點不相同的情況就像這樣headl:1->2->3->4->5->6->7->8->4;head2:9->8->4->5->6->7->8;具體圖像自己腦補吧:),這種情況,我能想到得是,先通過上面的方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遠程數(shù)字高清視頻監(jiān)控系統(tǒng)系統(tǒng)培訓、測試和驗收
- 三年級上冊第三單元備課教案 10在牛肚子里旅行
- 語文《談中國詩》說課稿
- 證券銀證轉(zhuǎn)賬協(xié)議三篇
- 系統(tǒng)架構(gòu)規(guī)劃與優(yōu)化培訓
- 2024年商品化色漿項目建議書
- 監(jiān)理期限合同范本
- 明星買房合同范本
- 河南省三門峽市(2024年-2025年小學五年級語文)統(tǒng)編版專題練習(下學期)試卷及答案
- 外包安保合同范本
- 民間借貸利息計算表
- 2024江蘇省鐵路集團限公司春季招聘24人高頻500題難、易錯點模擬試題附帶答案詳解
- 滬科版(2024)八年級全一冊物理第一學期期中學業(yè)質(zhì)量測試卷 2套(含答案)
- Q GDW 10115-2022 110kV~1000kV架空輸電線路施工及驗收規(guī)范
- 2023《住院患者身體約束的護理》團體標準解讀PPT
- 核心素養(yǎng)導向下初中數(shù)學課堂作業(yè)多元化設(shè)計
- 愚公移山英文 -中國故事英文版課件
- 國開經(jīng)濟學(本)1-14章練習試題及答案
- 施工現(xiàn)場平面布置圖
- 精神病醫(yī)院住院患者護理評估單
- 生活中的音樂教案
評論
0/150
提交評論