判斷單鏈表是否有環路可以參考:單鏈表判斷環路及環路的入口
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 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...