标签:ListNode val offer s1 链表 pHead1 pHead2 null 节点
解法一:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null){
return null;
}
LinkedList<ListNode> s1=new LinkedList<>();
LinkedList<ListNode> s2=new LinkedList<>();
while(pHead1!=null){
s1.addLast(pHead1);
pHead1=pHead1.next;
}
while(pHead2!=null){
s2.addLast(pHead2);
pHead2=pHead2.next;
}
ListNode ans=null;
while((s1.isEmpty()==false&&s2.isEmpty()==false)&&s1.getLast()==s2.getLast()){
ans=s1.getLast();
s1.removeLast();
s2.removeLast();
}
return ans;
}
}
首先我们考虑一般的情况,我们只需要把两个链表分别存储进两个栈里面,然后从后往前比较,第一个不是相同的节点就是我们需要的节点。
接下来考虑特殊情况:
1.某一个list为空那么就直接返回空
2. 一个链表包含另一个链表的时候
这个就是为什么最后的循环需要加s1.empty()的原因
方法二:
用set
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
HashSet<ListNode> s=new HashSet<>();
ListNode temp1=pHead1;
ListNode temp2=pHead2;
while(temp1!=null){
s.add(temp1);
temp1=temp1.next;
}
while(temp2!=null){
if(s.contains(temp2)){
return temp2;
}
else{
temp2=temp2.next;
}
}
return null;
}
}
方法同上
标签:ListNode,val,offer,s1,链表,pHead1,pHead2,null,节点 来源: https://blog.csdn.net/chenziang1/article/details/123030411
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。