2025-06-27
技术
00
go
package main import "fmt" type ListNode struct { Val int Next *ListNode } func getIntersectionNode(headA, headB *ListNode) *ListNode { if headA == nil || headB == nil { return nil } // 计算链表长度 lenA := 0 lenB := 0 currA, currB := headA, headB for currA != nil { lenA++ currA = currA.Next } for currB != nil { lenB++ currB = currB.Next } // 对齐起点 currA, currB = headA, headB if lenA > lenB { for i := 0; i < lenA-lenB; i++ { currA = currA.Next } } else { for i := 0; i < lenB-lenA; i++ { currB = currB.Next } } // 同步遍历直到找到相交节点或遍历结束 for currA != nil && currB != nil { if currA == currB { return currA } currA = currA.Next currB = currB.Next } return nil } // 测试代码 func main() { // 构造链表A: 1 -> 2 -> 3 \ // 6 -> 7 // 4 -> 5 / // 链表B: 4 -> 5 / common := &ListNode{6, &ListNode{7, nil}} headA := &ListNode{1, &ListNode{2, &ListNode{3, common}}} headB := &ListNode{4, &ListNode{5, common}} intersection := getIntersectionNode(headA, headB) if intersection != nil { fmt.Printf("相交节点值: %d\n", intersection.Val) } else { fmt.Println("没有相交节点") } }

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!