题目要求
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
思路
(1)要找公共结点,那么最后一定是一同到达链表末尾的,所以,先让长链表向后走step(step = |lengthA - lengthB|)步,再将两个链表的结点放在一起对比,返回第一个相同的结点即可
(2)详细步骤
①获取两个链表的长度
②比较长的链表向后走step(step = |lengthA - lengthB|)步,此时两个链表长度相同
③开始比较链表A和链表B的结点,遇到相同的结点就返回
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode A, ListNode B) {
int lengthA = getLengthOfList(A);
int lengthB = getLengthOfList(B);
if(lengthA<lengthB){
for(int i = 0;i<lengthB - lengthA;i++){
B = B.next;
}
}else{
for(int i = 0;i<lengthA - lengthB;i++){
A = A.next;
}
}
while(A != null&&B!=null){
if(A == B){
return A;
}
A = A.next;
B = B.next;
}
return null;
}
private int getLengthOfList(ListNode A) {
int size = 0;
while(A!= null){
A = A.next;
size++;
}
return size;
}
}