54.两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。
当不存在公共节点时,返回空节点。
数据范围:
链表长度 [1,30000]。
保证两个链表不完全相同,即两链表的头结点不相同。
样例:
给出两个链表如下所示:
输出第一个公共节点c1
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class Solution {
public ListNode findFirstCommonNode(ListNode headA, ListNode headB) {
//A指向A链表的头节点,B指向B链表的头节点
ListNode A = headA,B = headB;
//只要A不等于B就不断移动指针
//退出情况有两种:1.A和B指向同一个节点,且不为null,2.A和B都指向null
while(A!=B){
//判断A是否为null,不为null则指针向后移,否则指针指向B的头节点
A = A!=null?A.next:headB;
//判断B是否为null,不为null则指针向后移,否则指针指向A的头节点
B = B!=null?B.next:headA;
}
//如果A和B有公共节点的话,则A遍历完自己的链表再从B头节点开始遍历会和B遍历完自己的链表再从A头节点开始遍历重合,此时就可以返回其中任意一个节点
//如果A和B没有公共节点的话,则A和B都会是null,直接返回
return A;
}
}


浙公网安备 33010602011771号