單鏈表判斷是否相交

2021-08-11 10:27:58 字數 1552 閱讀 7380

判斷單鏈表是否有環路可以參考:單鏈表判斷環路及環路的入口

typedef

int datatype;//節點中資料型別

typedef

struct listnode//節點資料結構

listnode;

typedef

struct checknoode/

checknoode;

//判斷是否相交

bool checkismeet(listnode *plist1,listnode *plist2)

while (plist2->next !=

null)

if (plist1 == plist2)

else

}

//若相交,求交點

listnode *answermeetnode(listnode *plist1,listnode *plist2)

while (cur2 != null)

count = count1 - count2;

if (count > 0)

}else

}while (plist1 != plist2)

return plist1;

}

void test1()

else

}

1).兩個都不帶環

有可能相交,有可能不相交

2).乙個帶環乙個不帶環,必定不相交。

3).兩個都帶環

不相交

相交:交點不在環上;交點在環上

//判斷兩個鍊錶是否相交,若相交,求交點.(假設鍊錶可能帶環)

checknoode checkismeettop(listnode *plist1, listnode *plist2)

; tmp1 = iscycle(plist1);

tmp2 = iscycle(plist2);

if ((tmp1 ==

null) && (tmp2 ==

null))

while (tmp2->next !=

null)

if (tmp1 == tmp2)

else

}else

if ((tmp1 !=

null) && (tmp2 !=

null))

if (tmp == tmp2)

while (cur2 != tmp1)

count = count1 - count2;

if (count >

0)

}else

}while (plist1 != plist2)

ret.plist1 = plist1;

ret.flag =

3; return ret;

}else

}else

}else

}

參考

判斷單鏈表是否相交

二個單鏈表相交只能是y,不能是x,因為單鏈表每個節點只有乙個指標 問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍...

判斷兩個單鏈表是否相交

首先要搞清楚單鏈表相交的概念和特點 指的是他們存在完全重合的部分,不是交叉到乙個點 不存在這種情況,可以想想為什麼 判斷其是否相交的方法有以下幾種。1 最傳統方法 雙重迴圈,依次查詢,是否有位址相同的節點,時間複雜度o list1.len list2.len 空間複雜度o 1 2 hash法 先遍歷...

判斷兩個單鏈表是否相交

方法一 直接法 直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...