尋找兩個相交鍊錶的第乙個公共節點

2021-12-29 23:21:52 字數 1162 閱讀 7828

// 尋找兩個鍊錶的第乙個公共節點.cpp : defines the entry point for the console application.

///*

1.最簡單的方法就是先順序訪問其中乙個鍊錶,在每訪問乙個節點時,都對另外乙個鍊錶進行遍歷,看節點是否相等

直到找到乙個相等的節點位置,如果鍊錶長度分別是m,n 則時間複雜度為o(mn)

2.我們可以知道如果兩個鍊錶有公共節點,那麼該公共節點之後的所有節點都是兩個鍊錶所共有的,所以長度一定也是

相等的,如果兩個鍊錶的總長度是相等的,那麼我們對兩個鍊錶進行遍歷,則一定同時到達第乙個公共節點。但是鍊錶

的長度實際上不一定相同,所以我們只需要計算出兩個鍊錶的長度之差n,然後讓長的那個鍊錶先移動n步,短的鍊錶再

開始向後遍歷,這樣他們一定同時到達第乙個公共節點,我們只需要在向後移動的時候比較兩個鍊錶的節點是否相等就

可以獲得第乙個公共節點。時間複雜度是o(m+n)

*/#include "stdafx.h"

struct listnode

;unsigned int listlength(listnode* phead)

return nlength;

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

// move on the longer list

for(int i = 0; i < nlengthdif; ++ i)

plistheadlong = plistheadlong->m_pnext;

// move on both lists

while((plistheadlong != null) &&

(plistheadshort != null) &&

(plistheadlong != plistheadshort))

// get the first common node in two lists

listnode *pfisrtcommonnode = null;

if(plistheadlong == plistheadshort)

pfisrtcommonnode = plistheadlong;

return pfisrtcommonnode;

}

兩個鍊錶的第乙個公共節點(鍊錶相交)

題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點 鍊錶只要存在公共節點,那麼公共節點後面所有的節點都是公共的。因此,對於這種一般兩種思路 思路一 將兩個鍊錶分別壓入兩個棧中,然後從棧頂不斷比較。知道遇到第乙個不相等的節點,然後公共節點就是該節點的下乙個節點 思路二 如果能將鍊錶尾部對齊,那麼就可以兩...

兩個鍊錶第乙個公共節點

先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...

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

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