LeetCode160. ็ธไบค้พ่กจ๐๐๐๐๐็ฎๅ
่ฏพๅไฝไธ
้ฎ้ขๆ่ฟฐ
ๅๆ้พๆฅ๏ผ160. ็ธไบค้พ่กจ
็ปไฝ ไธคไธชๅ้พ่กจ็ๅคด่็น headA ๅ headB ๏ผ่ฏทไฝ ๆพๅบๅนถ่ฟๅไธคไธชๅ้พ่กจ็ธไบค็่ตทๅง่็นใๅฆๆไธคไธช้พ่กจไธๅญๅจ็ธไบค่็น๏ผ่ฟๅ null ใ
ๅพ็คบไธคไธช้พ่กจๅจ่็น c1 ๅผๅง็ธไบค๏ผ
้ข็ฎๆฐๆฎไฟ่ฏๆดไธช้พๅผ็ปๆไธญไธๅญๅจ็ฏใ
ๆณจๆ๏ผๅฝๆฐ่ฟๅ็ปๆๅ๏ผ้พ่กจๅฟ ้กปไฟๆๅ ถๅๅง็ปๆใ
่ชๅฎไน่ฏๆต๏ผ
่ฏๆต็ณป็ป็่พๅ ฅๅฆไธ๏ผไฝ ่ฎพ่ฎก็็จๅบไธ้็จๆญค่พๅ ฅ๏ผ๏ผ
intersectVal– ็ธไบค็่ตทๅง่็น็ๅผใๅฆๆไธๅญๅจ็ธไบค่็น๏ผ่ฟไธๅผไธบ0listA– ็ฌฌไธไธช้พ่กจlistB– ็ฌฌไบไธช้พ่กจskipA– ๅจlistAไธญ๏ผไปๅคด่็นๅผๅง๏ผ่ทณๅฐไบคๅ่็น็่็นๆฐskipB– ๅจlistBไธญ๏ผไปๅคด่็นๅผๅง๏ผ่ทณๅฐไบคๅ่็น็่็นๆฐ
่ฏๆต็ณป็ปๅฐๆ นๆฎ่ฟไบ่พๅ
ฅๅๅปบ้พๅผๆฐๆฎ็ปๆ๏ผๅนถๅฐไธคไธชๅคด่็น headA ๅ headB ไผ ้็ปไฝ ็็จๅบใๅฆๆ็จๅบ่ฝๅคๆญฃ็กฎ่ฟๅ็ธไบค่็น๏ผ้ฃไนไฝ ็่งฃๅณๆนๆกๅฐ่ขซ่งไฝๆญฃ็กฎ็ญๆก ใ
็คบไพ 1๏ผ
่พๅ
ฅ๏ผintersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
่พๅบ๏ผIntersected at '8'
่งฃ้๏ผ็ธไบค่็น็ๅผไธบ 8 ๏ผๆณจๆ๏ผๅฆๆไธคไธช้พ่กจ็ธไบคๅไธ่ฝไธบ 0๏ผใ
ไปๅ่ช็่กจๅคดๅผๅง็ฎ่ตท๏ผ้พ่กจ A ไธบ [4,1,8,4,5]๏ผ้พ่กจ B ไธบ [5,6,1,8,4,5]ใ
ๅจ A ไธญ๏ผ็ธไบค่็นๅๆ 2 ไธช่็น๏ผๅจ B ไธญ๏ผ็ธไบค่็นๅๆ 3 ไธช่็นใ
โ ่ฏทๆณจๆ็ธไบค่็น็ๅผไธไธบ 1๏ผๅ ไธบๅจ้พ่กจ A ๅ้พ่กจ B ไนไธญๅผไธบ 1 ็่็น (A ไธญ็ฌฌไบไธช่็นๅ B ไธญ็ฌฌไธไธช่็น) ๆฏไธๅ็่็นใๆขๅฅ่ฏ่ฏด๏ผๅฎไปฌๅจๅ
ๅญไธญๆๅไธคไธชไธๅ็ไฝ็ฝฎ๏ผ่้พ่กจ A ๅ้พ่กจ B ไธญๅผไธบ 8 ็่็น (A ไธญ็ฌฌไธไธช่็น๏ผB ไธญ็ฌฌๅไธช่็น) ๅจๅ
ๅญไธญๆๅ็ธๅ็ไฝ็ฝฎใ
็คบไพ 2๏ผ
่พๅ
ฅ๏ผintersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
่พๅบ๏ผIntersected at '2'
่งฃ้๏ผ็ธไบค่็น็ๅผไธบ 2 ๏ผๆณจๆ๏ผๅฆๆไธคไธช้พ่กจ็ธไบคๅไธ่ฝไธบ 0๏ผใ
ไปๅ่ช็่กจๅคดๅผๅง็ฎ่ตท๏ผ้พ่กจ A ไธบ [1,9,1,2,4]๏ผ้พ่กจ B ไธบ [3,2,4]ใ
ๅจ A ไธญ๏ผ็ธไบค่็นๅๆ 3 ไธช่็น๏ผๅจ B ไธญ๏ผ็ธไบค่็นๅๆ 1 ไธช่็นใ
็คบไพ 3๏ผ
่พๅ
ฅ๏ผintersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
่พๅบ๏ผnull
่งฃ้๏ผไปๅ่ช็่กจๅคดๅผๅง็ฎ่ตท๏ผ้พ่กจ A ไธบ [2,6,4]๏ผ้พ่กจ B ไธบ [1,5]ใ
็ฑไบ่ฟไธคไธช้พ่กจไธ็ธไบค๏ผๆไปฅ intersectVal ๅฟ
้กปไธบ 0๏ผ่ skipA ๅ skipB ๅฏไปฅๆฏไปปๆๅผใ
่ฟไธคไธช้พ่กจไธ็ธไบค๏ผๅ ๆญค่ฟๅ null ใ
ๆ็คบ๏ผ
listAไธญ่็นๆฐ็ฎไธบmlistBไธญ่็นๆฐ็ฎไธบn1 <= m, n <= 3 * 1041 <= Node.val <= 1050 <= skipA <= m0 <= skipB <= n- ๅฆๆ
listAๅlistBๆฒกๆไบค็น๏ผintersectValไธบ0 - ๅฆๆ
listAๅlistBๆไบค็น๏ผintersectVal == listA[skipA] == listB[skipB]
ไปฃ็ ๅฎ็ฐ
Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null){
return null;
}
ListNode A = headA;
ListNode B = headB;
while(A != B){
A = A == null ?headB : A.next;
B = B == null ? headA : B.next;
}
return A;
}
}
Python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if headA is None or headB is None:
return None
A = headA
B = headB
while A != B:
A = A.next if A else headB
B = B.next if B else headA
return A
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (headA == nullptr || headB == nullptr) {
return nullptr;
}
ListNode *A = headA;
ListNode *B = headB;
while (A != B) {
A = A == nullptr ? headB : A->next;
B = B == nullptr ? headA : B->next;
}
return A;
}
};
Go
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA == nil || headB == nil {
return nil
}
A := headA
B := headB
for A != B {
A = A.Next
B = B.Next
if A == nil && B == nil {
return nil
}
if A == nil {
A = headB
}
if B == nil {
B = headA
}
}
return A
}



