链表节点的结构:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/ 解法一、栈
import java.util.*;
public class Solution {
public ListNode FindFirstCommonNode(ListNode h1, ListNode h2) {
ListNode ret = null;
if (h1 == null || h2 == null) return null;
Stack<ListNode> stack1 = new Stack<>();
Stack<ListNode> stack2 = new Stack<>();
while (h1!=null) {
stack1.push(h1);
h1 = h1.next;
}
while (h2!=null) {
stack2.push(h2);
h2 = h2.next;
}
while (!stack1.isEmpty() && !stack2.isEmpty()) {
if (stack1.peek().val == stack2.peek().val) {
ret = stack1.peek();
stack1.pop();
stack2.pop();
} else {
return ret;
}
}
return ret;
}
} 解法二、将两个链表连到一起
import java.util.*;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while(p1 != p2){
p1 = p1 == null ? pHead2 : p1.next;
p2 = p2 == null ? pHead1 : p2.next;
}
return p1;
}
} 
京公网安备 11010502036488号