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

2021-09-26 06:41:17 字數 761 閱讀 3269

當不存在公共節點時,返回空節點。

樣例給出兩個鍊錶如下所示:

a: a1 → a2

↘c1 → c2 → c3

↗b: b1 → b2 → b3

輸出第乙個公共節點c1

方法一:

有兩個指標 p指的a鍊錶頭部 q指的是b鍊錶的頭部 ,pq 同時走,一旦走到頭就換到另乙個鍊錶的頭上,p就到b鍊錶,q就到a鍊錶,如果是有公共節點的他們會相遇在公共結單,如果沒有公共節點就會相遇在null

public listnode findfirstcommonnode

(listnode heada, listnode headb)

return q;

}

方法二:

兩個鍊錶是乙個『y』型,從頭開始遍歷不好弄,所以可以從後開始遍歷,找到最後乙個相同的節點就是答案。

如何從後開始呢,單鏈表只能從前往後遍歷,所以會「後進先出」,就需要用到棧

public

static listnode findfirstcommonnode

(listnode heada, listnode headb)

while

(q!=null)

listnode res = null;

while

(stack1.

size()

>0)

else

}return res;

}

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

思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...

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

題目 輸入兩個鍊錶,找出他們的第乙個公共結點。方法1 分別把兩個鍊錶的節點放入兩個棧裡,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,接下來比較兩個棧頂的結點是否相同。如果相同,則把棧頂彈出接著比較下乙個棧頂,直到找到最後乙個相同的結點。時間和空間複雜度都是o m n 方法2 先遍歷兩個鍊錶得到它們的長度...

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

輸入兩個鍊錶,找出它們的第乙個公共結點。分析 如果兩個單向鍊錶有公共的結點,那麼這兩個鍊錶從某乙個結點開始,他們的next結點都指向同乙個結點,但由於是單向鍊錶的結點,每個結點都只有乙個next結點,因此從第乙個公共結點開始,之後他們所有結點都是重合的,不可能出現分支。public listnode...