LintCode 380 兩個鍊錶的交叉

2021-08-07 02:32:21 字數 1121 閱讀 7423

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。

注意事項 樣例

下列兩個鍊錶:

a:          a1 → a2

↘c1 → c2 → c3

b: b1 → b2 → b3

在節點 c1 開始交叉。

思路:1.鍊錶1從頭節點開始,走到最後乙個節點(不是結束),統計鍊錶1的長度記為len1,同時一記錄鍊錶1的最後乙個節點記為cura

2.鍊錶2從頭節點開始,走到最後乙個節點(不是結束),統計鍊錶2的長度記為len2,,同時一記錄鍊錶2的最後乙個節點記為curb

3.如果cura!=curb,說明兩個鍊錶不相交,返回null即可;如果cura==curb,說明兩個鍊錶相交,進入步驟4來找尋第乙個相交節點。

4.如果鍊錶1比較長,鍊錶1就先走len1-len2步;如果鍊錶2比較長,鍊錶2就先走len2-len1步。然後兩個鍊錶一起走,一起走的過程中,兩個鍊錶第一次走到一起的那個節點,就是第乙個相交的節點。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode *cura=heada;

listnode *curb=headb;

int len1=0,len2=0;

while(cura->next!=null)

while(curb->next!=null)

if(cura!=curb)

//這裡需要初始化

cura=heada;

curb=headb;

int res=len1-len2;

if(res>0) //鍊錶1比較長,鍊錶1就先走len1-len2步

for(int i=0;inext;

}if(res<0) //如果鍊錶2比較長,鍊錶2就先走len2-len1步

for(int i=0;inext;

}while(cura!=curb)

return cura;

}};

lintcode 380 兩個鍊錶的交叉

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。樣例 樣例 1 輸入 a a1 a2 c1 c2 c3 b b1 b2 b3 輸出 c1 解釋 在節點 c1 開始交叉。樣例 2 輸入 intersected at 61 2 3 4 5 6 7 8 9 10 11 12 13 null6 7 8 9 1...

lintcode練習 380 兩個鍊錶的交叉

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始交叉。需滿足 o n 時間複雜度,且僅用 o 1 記憶體。第一步 得到a,b的長度,和a,b的最後乙個節點enda,endb 第二步 對enda,endb進行判斷,如果...

合併兩個排序鍊錶 LintCode

描述 將兩個排序鍊錶合併為乙個新的排序鍊錶。樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。思路 這道題其實跟上一道鍊錶的插入排序是親兄弟啊,在鍊錶的插入排序裡面我們自己建立了新的鍊錶dummy用來存放我們的排好序的鍊錶,這道題裡給出的兩條鍊錶都是...