题目:
找到两个单链表相交的起始节点;
比如:

从c1开始相交:
输入: listA = [4,1,8,4,5], listB = [5,0,1,8,4,5],
输出: 8
思路:
- 首先对于传入的A链、B链判断不能为nil;
- 只要两个节点不相等就循环,知道找到相等的那个节点
- A、B每次都是走一步,走到头会延续对方的路走,这样他们走的路就是相同的;只要不是平行,必然可以找到那个相交的节点;
代码:
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{
if a==nil{
a=headB
}else{
a=a.Next
}
if b==nil{
b=headA
}else{
b=b.Next
}
}
return a
}

本文介绍了一种高效算法,用于查找两个单链表的首个相交节点。通过让两个指针分别遍历两个链表,当到达链表末尾时转向另一个链表,最终在相交点相遇。该算法无需额外空间,简洁且实用。
307

被折叠的 条评论
为什么被折叠?



