面试题02.07.链表相交
思路:
本题要考虑到有相交的节点时,其后面节点也都一致,所以在最后面比较时应该比较指针是否一致。
- 求出两条链表的长度,并将两个指针分别指向两条链表的同一位置。如下图:
- 比较指针是否相等即可,不相等继续向后移动,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
ListNode A = null;
ListNode B = null;
ListNode dummyA = headA;
ListNode dummyB = headB;
int lenA = 0;
int lenB = 0;
while (dummyA != null) {
dummyA = dummyA.next;
lenA++;
}
while (dummyB != null) {
dummyB = dummyB.next;
lenB++;
}
int gap = Math.abs(lenA - lenB);
if (lenA >= lenB) {
while (gap-- > 0) {
headA = headA.next;
}
} else {
while (gap-- > 0) {
headB = headB.next;
}
}
while (headA != null) {
if (headA == headB) {
return headA;
} else {
headA = headA.next;
headB = headB.next;
}
}
return null;
}
}