鍊錶 找出兩個鍊錶的交點

2021-10-20 17:46:53 字數 1538 閱讀 4329

一、暴力求解法

思路:有2個鍊錶,所以我們可以使用雙重迴圈,先遍歷第乙個鍊錶,在遍歷第乙個鍊錶的同時裡面巢狀遍歷第二個鍊錶。**如下:

這裡需要注意的是第二個鍊錶會多次的遍歷,所以遍歷完一次之後需要將指標?放到第乙個節點上面,這樣才可以繼續遍歷這個鍊錶。

/**

* 暴力法求解 遍歷2個鍊錶

* @param heada

* @param headb

* @return

*/public

static listnode getintersectionnode2

(listnode heada, listnode headb)

l2 = l2.next;

} l2 = headb;

l1 = l1.next;

}return null;

}

二、雙指標法思路:使用2個指標,指標放在每個鍊錶的頭部,然後同時向後面移動,當指標到達鍊錶的末尾時,下一次節點指向另乙個鍊錶的頭部。因為鍊錶的長度a + b = b + a 這樣就可以保證最終同時遍歷到交點。**如下:

/**

* 雙指標

* @param heada

* @param headb

* @return

* 不斷的迴圈一起向下走,如果走到l1的末尾就將它指向l2進行向下走。

* 這裡到達末尾指向另乙個鍊錶的首部可以減少迴圈的次數

*/public

static listnode getintersectionnode1

(listnode heada, listnode headb)

return l1;

}

三、雜湊表法思路:先遍歷第乙個鍊錶,將鍊錶的所有節資訊儲存在乙個hashset當中,記錄完成後,遍歷第二個鍊錶,遍歷過程中判斷當前節點是不是在hashset中,如果在就返回。不在就繼續遍歷,直到遍歷完成。**如下:

/**

* 使用雜湊

* @param heada

* @param headb

* @return

*/public

static listnode getintersectionnode3

(listnode heada, listnode headb)

while

(l2 != null)

l2 = l2.next;

}return null;

}

四、結果

如有錯誤,請指正!!!

判斷兩個鍊錶是否相交並找出交點

問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...

判斷兩個鍊錶是否相交並找出交點

問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...

求兩個單向鍊錶的交點

題目 給出兩個單向鍊錶,判斷其是否有交點 如果存在交點,請找出交點 解題思路 如果存在交點,則兩個鍊錶的節點結構必定是同構的 如果存在交點,則兩個鍊錶必定程式y字形,而不可能是x形 如果存在交點,兩個鍊錶在交點及其之後的部分是一致的 這點很關鍵,一致的意思包括兩部分 長度和內容。基於以上三點,可以給...