题意:
链表题,寻找两个链表的公共节点。
解答:
单链表节点只有一个地址连向下个节点,所以公共节点以后肯定就剩一条链表。
这种题型直接从最后开始遍历,开始出现不相等了,这个就是我们要找的
PAT的链表题定义操作类似
用节点定义
将id和对象放到map中
再进行遍历
然后操作
具体java代码如下:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String head1=in.next();
String head2=in.next();
int N=in.nextInt();
ArrayList<Node> list1=new ArrayList();
ArrayList<Node> list2=new ArrayList();
HashMap<String,Node> map=new HashMap();
for(int i=0;i<N;i++){
Node node=new Node();
node.id=in.next();
node.val=in.next();
node.next=in.next();
map.put(node.id,node);
}
while(!head1.equals("-1")){
Node nd=map.get(head1);
list1.add(nd);
head1=nd.next;
}
while(!head2.equals("-1")){
Node nd=map.get(head2);
list2.add(nd);
head2=nd.next;
}
int a=list1.size();
int b=list2.size();
int len=a>b?b:a;
int temp=0;
for(int i=0;i<len;i++){
String a1=list1.get(a-1-i).val;
String a2=list2.get(b-1-i).val;
if(a1!=a2){
temp=i-1;
break;
}
}
if(temp<0){
System.out.println("-1");
}
else
System.out.println(list1.get(a-1-temp).id);
}
}
class Node{
String id;
String val;
String next;
}