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

2021-08-08 14:43:14 字數 1043 閱讀 3354

輸入兩個鍊錶,找出它們的第乙個公共結點。

分析:兩個鍊錶的第乙個公共結點相同,表明結點的值和節點的next域都相同,兩個鍊錶的後續節點都相同,直到尾節點。

/*

struct listnode

};*/

/*思路一:用兩個指標分別遍歷兩個鍊錶,最終兩個指標到達null或者到達公共結點。

假定 list1長度: a+n  list2 長度:b+n, 且 a=b.

時間複雜度o(n+a+b),**最簡潔。*/

class solution

return p1;

}};/*思路二:同樣利用兩個指標的快慢指標思想,求出兩個鍊錶的長度之差m,讓較長的鍊錶先走m步,保證兩個鍊錶的尾節點相同。 */

class solution

while(pnode2)

pnode1=phead1;

pnode2=phead2;

if(length1>length2)

for(int i=0;inext;

else

for(int i=0;inext;

while(pnode1!=pnode2)

return pnode1;

}};/*思路三:利用棧儲存兩個鍊錶的元素,找到第乙個相等的結點,即為它們的第乙個公共結點*/

class solution

while(phead2)

listnode* commonlistnode=null;

while(!stack1.empty()&&!stack2.empty()&&stack1.top()==stack2.top())

return commonlistnode;

}};/*用map做的,時間複雜度o(nlog(n))*/

classsolution

p = phead2;

while(p != null)

p = p->next;

}return null;

}};

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

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

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

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

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

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