兩個鍊錶第乙個公共節點

2021-08-22 02:44:46 字數 1010 閱讀 5051

先讓長的鍊錶的指標先走長的之差的步數, 兩個再一起走, 如果相遇就是第乙個公共節點

如果沒交點, 就都走到空

/*

struct listnode

};*/

class solution

while(pl2 !=

null)

// 復位指標到頭節點

pl1 = phead1;

pl2 = phead2;

int dif_len =

0; if(len1 > len2)

}else

}// 再讓兩個一起走

while(pl1 !=

null)

pl1 = pl1->next;

pl2 = pl2->next;

}return

null;}};

不用計算長度, 兩個指標分別指向兩個鍊錶, 只要兩個指標不相等就一直走

如果乙個指標走到空, 就讓它指向另一條鍊錶的頭, 再繼續走

如果兩個鍊錶相交, 兩個指標肯定會相遇

如果不相交, 兩個鍊錶都走到空, 迴圈結束, 返回空

如上圖所示, l1 長為 10, l2 長為 15

兩個先一起走, 當短的走到空的時候, 長的剛走到兩個的交點處, 然後讓短的指標指向長的鍊錶, 再一起走, 長的指標到空, 這時短的指標已經走到了兩個鍊錶長度差值的地方, 再讓長的指標指向短的鍊錶, 再一起走, 相當於兩個指標就在同一起跑線了, 再往下走, 肯定會相遇

/*

struct listnode

};*/

class solution

else

if(pl2 != null)

else

}return pl1;}};

兩個鍊錶的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共的節點。碰到這種題的時候千萬不要用挨個遍歷的方法,時間複雜度高 對於兩個有相同節點的鍊錶的形狀一定是y。而不是x。然後還可能乙個鍊錶長乙個鍊錶短,我們可以求出差值,然後讓長鍊表先走差值的長度,然後在挨個比較就可以了。這樣時間複雜度就小很多了 劍指offer 名企面試...

兩個鍊錶的第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 先遍歷兩個鍊錶得到它們的長度,求出長鍊錶比短鍊錶多幾個 第二次遍歷,在長鍊表上先走若干步,接著同時在兩個鍊錶上遍歷,找到的第乙個相同的結點就是它們的第乙個公共結點。public class listnode public listnode find...

兩個鍊錶的第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 定義兩個指標,一起走,如果其中乙個走到尾部,則該指標指向另乙個鍊錶頭部。如果有公共節點,這這兩個指標一定會相遇 因為假如長度不一樣的話,其中p1先走完,這時p2剛好走完了p1的長度,也就是剩下的長度為兩個鍊錶的差 此時p1指向p2的鍊錶,當p2走完...