1.解题思路
此处撰写解题思路
这应该是最简单的解法了,通过map特性对链表进行判断,先存入其中一个链表,然后再存入另一个的时候判断当前链表是否已经存在,如果存在则说明是交叉链表,且当前节点为交叉节点
时间复杂度:O(n)
空间复杂度:O(n)
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
mapListNode := make(map[ListNode]*ListNode)
for headA != nil {
mapListNode[*headA] = headA
headA = headA.Next
}
for headB != nil {
if mapListNode[*headB] == headB {
return headB
}
mapListNode[*headB] = headB
headB = headB.Next
}
return nil
}
2.
/**
* 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
}
nodeA, nodeB := headA, headB
for nodeA != nodeB {
if nodeA == nil { // A没有了接headB
nodeA = headB
}else {
nodeA = nodeA.Next
}
if nodeB == nil { // B没有了接headA
nodeB = headA
}else {
nodeB = nodeB.Next
}
}
return nodeA
}