题目描述:输入两个链表,找出它们的第一个公共结点。
实现语言:Java
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null||pHead2==null){
return null;
}
Stack<ListNode> stk1=new Stack<ListNode>();
Stack<ListNode> stk2=new Stack<ListNode>();
while(pHead1!=null){
stk1.push(pHead1);
pHead1=pHead1.next;
}
while(pHead2!=null){
stk2.push(pHead2);
pHead2=pHead2.next;
}
ListNode commonNode=null;
while(!stk1.isEmpty()&&!stk2.isEmpty()&&stk1.peek()==stk2.peek()){
stk1.pop();
commonNode=stk2.pop();
}
return commonNode;
}
}
实现语言:Java
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.HashMap;
public class Solution {
public ListNode FindFirstCommonNode(ListNode head1, ListNode head2) {
if(head1==null||head2==null){
return null;
}
HashMap<ListNode,ListNode> map=new HashMap<ListNode,ListNode>();
while(head1!=null){
map.put(head1,head1);
head1=head1.next;
}
while(head2!=null){
if(map.containsKey(head2)){
return head2;
}
head2=head2.next;
}
return null;
}
}
实现语言:Java
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null||pHead2==null){
return null;
}
ListNode cur=pHead1;
int n=0;
while(cur!=null){
++n;
cur=cur.next;
}
cur=pHead2;
while(cur!=null){
--n;
cur=cur.next;
}
ListNode shortList=null;
ListNode longList=null;
if(n<0){
shortList=pHead1;
longList=pHead2;
}else{
shortList=pHead2;
longList=pHead1;
}
n=n<0?-n:n;
for(int i=0;i<n;++i){
longList=longList.next;
}
while(shortList!=null&&longList!=null&&shortList.val!=longList.val){
shortList=shortList.next;
longList=longList.next;
}
return longList;
}
}