鍊錶 兩個鍊錶的相交問題

2021-08-02 22:48:50 字數 1252 閱讀 7760

1.分析:在已知鍊錶不帶環時,如果兩個鍊錶的尾部相同則相交,用快慢指標求交點。

listnode* getmeetnode(listnode* list1,listnode* list2)//判斷相交點

while(cur2)

listnode* longlist = list1;

listnode* shortlist = list2;

if(len1 < len2)

int gap = abs(len1-len2);

while(gap--)

while(longlist)

longlist = longlist->next;

shortlist = shortlist->next;

}return null;

}

2.分析:判斷l1和l2是否帶環

a.l1和l2都不帶環,求鍊錶的尾是否帶環,求交點

b.l1帶環,l2不帶環或l1不帶環,l2帶環。則l1和l2一定不相交

c.l1和l2都帶環

1)入口點在環外—>交點+入口點

2)入口點在環內—>兩個點即是交點又是入口點

3)帶環不相交

listnode* istersect(listnode* plist1, listnode* plist2)//判斷鍊錶是否相交公升級版  

listnode* enter1 = enternode(plist1);  

listnode* enter2 = enternode(plist2);  

//1.若兩個鍊錶都無環,則直接用題目二的函式解決  

if ((enter1 == null) && (enter2 == null))  

//2.若乙個有環,乙個無環,則不想交,返回null  

else if ((enter1 == null) && (enter2 != null) || (enter1 != null) && (enter2 == null))  

若入口點相同都在尾巴,去掉環,轉化成無環相交問題  

else if (enter1 == enter2)  

同環,兩個入口點  乙個入口點開始遍歷一圈,看環上是否有另乙個入口點    

// 找到則返回plist1的入口點    

else  

tmp = tmp->next;  

}  return null;  

}  }

兩個相交鍊錶

兩個單鏈表相交的一系列問題 題目 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能 不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1 的長度為n,鍊錶2的長度為m,時間複...

判斷兩個鍊錶是否相交

思路1 最暴力的辦法,針對鍊錶1的每乙個節點,判斷其是否也在鍊錶2中,複雜度o n m 明顯不是乙個好方法。思路2 給每個節點增加乙個標記量,可以是附在鍊錶中的成員,也可以是另外的乙個結構,例如用乙個陣列來儲存。先遍歷鍊錶1,標記出遍歷過的節點,再遍歷鍊錶2,如果發現某個節點已經被遍歷過,則說明相交...

判斷兩個鍊錶是否相交

參考 判斷兩個鍊錶是否相交 假設兩個鍊錶都沒有環 有以下三種方法 1 判斷第乙個鍊錶的每個節點是否在第二個鍊錶中 2 把第二個鍊錶連線到第乙個後面,判斷得到的鍊錶是否有環,有環則相交 3 先遍歷第乙個鍊錶,記住最後乙個節點,再遍歷第二個鍊錶,得到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,如果相...