本文主要是介绍Java--两条链表相交问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
两链表相交
1.两个有序链表的按data值从小到大连接
①.设一个虚拟节点node
②.两链表从头结点开始比较data的值
③.data值小的依次连在node后面
public static ListNade mergeTwoLists(ListNade headA,ListNade headB) {ListNade node=new ListNade(-1);ListNade tmp=node;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 node.next;}
2.两个链表的交点
public static ListNade getIntersectionNode(ListNade headA,ListNade headB){if(headA == null || headB == null) {return null;}//永远指向最长的单链表ListNade pL = headA;//永远指向最短的单链表ListNade pS = headB;int lenA = 0;int lenB = 0;//分别求长度while (pL!=null){pL=pL.next;lenA++;}while (pS!=null){pS=pS.next;lenB++;}//求长度的差值int len = lenA-lenB;//如果是负数-》pL = headB; pS = headAif(len<0){pL=headB;pS=headA;len=lenB-lenA;}else {pL=headA;pS=headB;}//只需要让pL走len步就好了while(len>0){pL=pL.next;len--;}//走完len步之后 两个同时开始走//一直走 走到值相同时 就是交点while (pL!=pS && pL!=null){pL=pL.next;pS=pS.next;}if(pL==pS && pL!=null){return pS;}return null;}
这篇关于Java--两条链表相交问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!