判斷兩個鍊錶是否相交

2021-07-30 04:59:54 字數 1083 閱讀 1591

這是一道比較綜合的題目。將鍊錶中關於環和相交的問題聚集在一起了,關鍵是要思路清晰。

思路如下:

/*

* 判斷鍊錶是否有環

* 1 如果乙個有環乙個無環,則肯定不相較

* 2 如果都無環,則遍歷到尾部,看看最後乙個節點是否相等即可

* 如果要找到第乙個相交的點,則讓長的鍊錶先走len1-len2步,再同時走,找到相等的節點即可

* 3 如果都有環,則先找到各自的環入口點(快慢指標,第一次相遇後,快指標從頭節點開始,每次走一步,慢指標繼續向前走一步,直至再次相遇)

* 如果兩個入口點相等,則肯定相交

* 如果要找到第乙個相交的點,則需要讓長的鍊錶(從頭節點到相交的節點)先走len1-len2步,然後同時走,找到相等的點即可

* 如果兩個入口點不相等,則選其中乙個相交點,繼續向後走,看看 是否會經歷另外乙個相交點,如果經歷了,則相交,否則不相交

*/

具體**如下:

public

boolean

chkinter(listnode head1, listnode head2, int adjust0, int adjust1)

while(head2.next !=null)

if(head1==head2) else

} else

if(node1!=null && node2!=null) else

cur = cur.next;

}//不相交

return

false;

}} else

}private listnode chkloop(listnode head)

}//沒有環則返回null

if(fast==null || fast.next==null) return

null;

fast = head;

while(slow!=fast)

return slow;

}

判斷兩個鍊錶是否相交

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

判斷兩個鍊錶是否相交

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

判斷兩個鍊錶是否相交

判斷兩個鍊錶是否相交,程式設計之美 給出了以下方法 1.判斷第乙個鍊錶的每個節點是否在第二個鍊錶中,這種方法的時間複雜度為 o length h1 length h2 這種方法很耗時間 2.利用計數的方法 乙個簡單的做法是對第乙個鍊錶的結點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每...