输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
勉强通过
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.ArrayList;
public class Solution {
public ListNode FindFirstCommonNode(ListNode headA, ListNode headB) {
if(headA==null||headB==null){
return null;
}
ArrayList<ListNode> hA = new ArrayList<>();
ArrayList<ListNode> hB = new ArrayList<>();
while(headA!=null){
hA.add(headA);
headA = headA.next;
}
while(headB!=null){
hB.add(headB);
headB = headB.next;
}
int hAlen = hA.size();
int hBlen = hB.size();
if(hA.get(hAlen-1)!=hB.get(hBlen-1)){
return null;
}else{
for(int i=1;i<=Math.min(hAlen,hBlen); i++){
if((hAlen - i == 0 || hBlen-i==0)&&(hA.get(hAlen - i) == hB.get(hBlen-i))){
return hA.get(hAlen - i);
}
if(hA.get(hAlen - i) != hB.get(hBlen-i)){
return hA.get(hAlen - i+1);
}
}
}
return null;
}
}
将两个链表对齐
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.ArrayList;
public class Solution {
public ListNode FindFirstCommonNode(ListNode headA, ListNode headB) {
int lenA = getLen(headA);
int lenB = getLen(headB);
if(lenA>lenB){
for(int i=0; i<lenA-lenB; i++){
headA = headA.next;
}
}else{
for(int i=0; i<lenB-lenA; i++){
headB = headB.next;
}
}
while(headA!=headB){
headA =headA.next;
headB = headB.next;
}
return headA;
}
public int getLen(ListNode node){
int len = 0;
while(node!=null){
len++;
node = node.next;
}
return len;
}
}