链表操作
思路是:
- 先找到两个链表的长度
- 在根据链表的长度差
sizeA - sizeB
移动链表A
的指针 (这里要保证链表A
的长度是要大于链表B
的长度的 - 再共同移动指针,如果有相同的则
return
当前节点
/**
* 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) {
ListNode curA = headA;
ListNode curB = headB;
int sizeA = 0, sizeB = 0;
while (curA != null) {
sizeA++;
curA = curA.next;
}
while (curB != null) {
sizeB++;
curB = curB.next;
}
// make LinkedList A always the longer one.
if (sizeB > sizeA) {
int tempSize = sizeA;
sizeA = sizeB;
sizeB = tempSize;
ListNode tempNode = headA;
headA = headB;
headB = tempNode;
}
curA = headA;
curB = headB;
for (int i = 0; i < sizeA - sizeB; i++) {
curA = curA.next;
}
while (curA != null) {
if (curA == curB) {
return curA;
}
curA = curA.next;
curB = curB.next;
}
return null;
}
}