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

2022-03-18 03:52:20 字數 1078 閱讀 4883

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

題目描述

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

思想: 先比較兩個鍊錶的長度, 讓得出差值, 讓長的先走長出的節點數目, 然後兩個鍊錶一起走, 有相同節點時, 指向鍊錶的游標會碰在一起, 此時游標就是返回值, 時間複雜度o(m+n)?

class solution 

return count;

}listnode* findfirstcommonnode( listnode* phead1, listnode* phead2)

}else

}while ((ctnode1 != ctnode2) && (nullptr != ctnode1) && (nullptr != ctnode2))

return ctnode1;

}};

利用棧, 先把兩個序列分別壓入兩個棧中, 然後再依次彈出, 直至不同元素時返回, vs上測試通過, 牛客提交有問題

class solution 

while (nullptr != ct2)

while (sk1.top() == sk2.top())

return ret;

}};

暴力法, 以此內外層迴圈, 注意, 第二個while迴圈後要把游標置於開頭位置(我忘了:(), 時間複雜度o(mn)

class solution 

listnode *ctlist1 = phead1;

listnode *ctlist2 = phead2;

while (nullptr != ctlist1)

ctlist2 = phead2;

ctlist1 = ctlist1->next;

}return nullptr;

}};

/*

struct listnode

};*/

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

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

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

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

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

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