請寫乙個程式,找到兩個單鏈表最開始的交叉節點。
注意事項 樣例
下列兩個鍊錶:
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用來存放我們的排好序的鍊錶,這道題裡給出的兩條鍊錶都是...