Intersection Of Two Linked Lists
题目描述
相交链表:
找到两个单链表相交的的起始节点。
解法
链表节点为:
type ListNode struct {
Val int
Next *ListNode
}
解法一:暴力
对于链表A
的每个节点,在链表B
中查找是否有重复节点。
解法二:哈希
遍历链表A
的每个节点并且存储,然后遍历链表B
,找到重复节点。
解法三:双指针
一个指针指向A
,一个指针指向B
,同时向前走。走到结尾再从另一个链表开始,直到相遇。
时间复杂度:
O(n)
空间复杂度:
O(1)
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA == nil || headB == nil {
return nil
}
node1, node2 := headA, headB
for node1 != node2 {
if node1 == nil {
node1 = headB
} else {
node1 = node1.Next
}
if node2 == nil {
node2 = headA
} else {
node2 = node2.Next
}
}
return node1
}
Last updated
Was this helpful?