/*public class ListNode {
int val ;
ListNode next=null;
public void setVal(int val) {
this.val = val;
}
} */
import java.util.Stack;
/***
* @author zhaokun
* 两个链表的第一个公共点 第一个之后的公共点之后都是一样的(从尾部开始)
*/
public class LinkListCommonNode {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null){
return null;
}
ListNode p1 = pHead1;
ListNode p2 = pHead2;
ListNode firstNode = null;
ListNode node1 = null;
ListNode node2 = null;
Stack<ListNode> stack1 = new Stack<ListNode>(); //将两个链表分别压栈,
//从链表尾部开始出栈,比较是否相等,
//相等push进栈,若存在,则是第一个pop出来的就是
Stack<ListNode> stack2 = new Stack<ListNode>();
Stack<ListNode> stack = new Stack<ListNode>();
while(p1!=null){
stack1.push(p1);
p1 = p1.next;
}
while(p2!=null){
stack2.push(p2);
p2 = p2.next;
}
while (!stack1.isEmpty()&&!stack2.isEmpty()){
node1 = stack1.pop();
node2 = stack2.pop();
if(node1==node2){
stack.push(node1);
}
}
if(!stack.isEmpty()){
firstNode = stack.pop();
}
return firstNode;
}
}