Q:输入两个链表,找出它们的第一个公共节点。
- 定义两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点
- 同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;
- 当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。
- 当它们相遇时,所指向的结点就是第一个公共结点
/**
* 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 PA = headA;
ListNode PB = headB;
while(PA != PB){
PA = PA == null ? headB : PA.next;
PB = PB == null ? headA : PB.next;
}
return PA;
}
}