Swordはoffer-52を指します。2つのリンクリストの最初の共通ノード-分析とコード[Java]
1.タイトル
2つのリンクリストを入力し、それらの最初の共通ノードを見つけます。(受信データはリンクリストであるため、受信データが正しいことを確認するために、間違ったテストデータのプロンプトが他の方法で表示されることに注意してください)
2、分析とコード
1.同期場所
(1)考える
共通ノードの後、2つのリンクリストの後続のノードはまったく同じです。したがって、2つのリンクリストの対応する位置を後ろから前に同期して、最初の共通ノードを取得できます。
2つのリンクリストを別々にトラバースすることにより、それぞれの長さが取得されます。長さの差を計算した後、長いリンクリストは対応するノードの数をスキップし、同時にトラバースして、対応するノードが同じかどうかを比較します。
(2)コード
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if (pHead1 == null || pHead2 == null)
return null;
int len1 = 0, len2 = 0;
ListNode cHead1 = pHead1;
ListNode cHead2 = pHead2;
while (cHead1 != null) {
cHead1 = cHead1.next;
len1++;
}
while (cHead2 != null) {
cHead2 = cHead2.next;
len2++;
}
if (len1 >= len2) {
cHead1 = pHead1;
cHead2 = pHead2;
}
else {
cHead1 = pHead2;
cHead2 = pHead1;
}
for (int i = len1 - len2; i > 0; i--)
cHead1 = cHead1.next;
while (cHead1 != null && cHead2 != null && cHead1 != cHead2) {
cHead1 = cHead1.next;
cHead2 = cHead2.next;
}
return cHead1;
}
}
(3)結果
実行時間:17ms、メモリ使用量:9660k。
3、その他
何もありません。