题目:
算法思想:
这题的话,主要也是双指针,分别指向A链表和B链表,分别求出来两个链表的长度,然后计算他们长度的差值,最后长的链表指针先走num步,然后两个同时走,如果出现指针指向同一结点,就表示,找到了共同结点。
代码:
/**
* 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 p1 = headA;
ListNode p2 = headB;
int numA = 0;
int numB = 0;
// 计算链表A长度
while(p1 != null) {
numA++;
p1 = p1.next;
}
// 计算链表B长度
while(p2 != null) {
numB++;
p2 = p2.next;
}
int num = 0;
// 计算两个链表差值
if(numA >= numB) {
num = numA - numB;
} else {
num = numB - numA;
ListNode temp = headB;
headB = headA;
headA = temp;
}
// 提前走num步
for(int i = 0; i < num; i++) {
headA = headA.next;
}
// 两个指针一起走
while(headA != headB) {
headA = headA.next;
headB = headB.next;
}
return headA;
}
}