标签:Node ps 单链 JAVA -- next 链表 节点 pl
问题1:输入两个链表,找出它们的第一个公共节点
问题2:将两个升序链表合成一个升序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的
/*输入两个链表,找出它们的第一个公共节点
如果两个链表的长度不一样,定义两个链表的头节点分别为pl(较长的链表),ps(较短的链表),
先计算两个链表的长度,得到的△,让较长的链表pl先走△个节点,与较短的链表ps长度相同时,
以同等速度向后走,当pl.next=ps.next,即为第一个公共节点
* */
public static Node getIntersectionNode(Node headA,Node headB){
int lenA=0;
int lenB=0;
Node pl=headA;
Node ps=headB;
while(pl!=null){
pl=pl.next;
lenA++;
}
while (ps!=null){
ps=ps.next;
lenB++;
}
int len=lenA-lenB;
if(len<0){
pl=headB;
ps=headA;
len=lenB-lenA;
}else{
pl=headA;
ps=headB;
}
for(int i=0;i<len;i++){
pl=pl.next;
}
while(pl!=ps&&pl!=null&&ps!=null){
ps=ps.next;
pl=pl.next;
}
if(pl==ps&&pl!=null&&ps!=null){
return pl;
}
return null;
}
/*将两个升序链表合成一个升序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的
定义了一个傀儡节点newHead来保存新链表第一个节点,tmp是从newHead开始,来收集新链表升序的引用,
可以把tmp看做“墙头草”,哪边小往哪边倒。
*/
public Node nergeTwolists(Node headA,Node headB){
Node newHead=new Node(-1);
Node tmp=newHead;
while (headA!=null&&headB!=null){
if(headA.data<headB.data){
tmp.next=headA;
headA=headA.next;
tmp=tmp.next;
}else {
tmp.next=headB;
headB=headB.next;
tmp=tmp.next;
}
}
if(headA!=null){
tmp.next=headA;
}
if(headB!=null){
tmp.next=headB;
}
return newHead.next;
}
标签:Node,ps,单链,JAVA,--,next,链表,节点,pl 来源: https://blog.csdn.net/m0_58181298/article/details/119334750
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。