给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 题目数据保证整个链式结构中不存在环。 注意,函数返回结果后,链表必须保持其原始结构。
解题思路:
定义两个指针分别指向两个链表的头部, 首先让两个指针向后移动,让先移动到末尾的指针从另一个链表的头部再次移动, 最后如果相遇则为交点。 原理:在第一轮移动中恰好抹除了长度差,两个指针等于移动了相同的距离, 有交点就返回, 无交点就是各走了两条指针的长度。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) {
return null;
}
ListNode head1 = headA;
ListNode head2 = headB;
while (head1 != head2) {
if (head1 != null) {
head1 = head1.next;
} else {
head1 = headB;
}
if (head2 != null) {
head2 = head2.next;
} else {
head2 = headA;
}
}
return head1;
}
}
时间复杂度:O(m+n),其中 m 和 n 是两个链表的长度 空间复杂度:O(1)
如果对您有所帮助的话,请点个赞再退出吧!!!
题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/添加链接描述
|