一、暴力求解法
思路:有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形 如果存在交點,兩個鍊錶在交點及其之後的部分是一致的 這點很關鍵,一致的意思包括兩部分 長度和內容。基於以上三點,可以給...