160.相交链表
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
图示两个链表在节点 c1
开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
Solution:双指针
两个指针分别从两个链表起始处出发,同时增加,如果到了尽头,就从另一个链表起始处开始,如果两个链表相交,则指针必会在相交处相等,如果不相交,则必会同时到尽头
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode l1 = new ListNode(-1); l1 = headA; ListNode l2 = new ListNode(-1); l2 = headB; int flag1 = 0; int flag2 = 0;
while (l1 != null && l2 != null) { if (l1 == l2) { return l2; } l1 = l1.next; if (l1 == null && flag1 == 0) { flag1 = 1; l1 = headB; } l2 = l2.next; if (l2 == null && flag2 == 0) { flag2 = 1; l2 = headA; } } return null; } }
|