java编程题之合并两个排序的链表
本文实例为大家分享了java合并两个排序的链表,供大家参考,具体内容如下
/** * *剑指offer编程题(JAVA实现)——第16题:合并两个排序的链表 * *输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 * */ publicclassTest16{ publicstaticListNodeMerge(ListNodelist1,ListNodelist2){ if(list1==null){//首先判断是否有链表为空 returnlist2; }elseif(list2==null){ returnlist1; } ListNodeend1=list1; ListNodeend2=list2; ListNodetmp;//end1和end2分别代表两个链表,tmp用于中间合成链表 if(end1.val>end2.val){//把首节点小的链表看作end1 tmp=end1; end1=end2; end2=tmp; }else{ } ListNodenewNode=end1;//用于最终返回的链表首节点 while(end1.next!=null&&end2.next!=null){//将链表2中的元素插入链表1中合适的位置 if(end1.val<=end2.val&&end1.next.val>=end2.val){ tmp=end2.next; end2.next=end1.next; end1.next=end2; end1=end2; end2=tmp; }else{ end1=end1.next; } } if(end1.next==null){//如果链表1到尾节点了则直接连接剩下的链表2中的首节点 end1.next=end2; returnnewNode; }else{ if(end1.next!=null&&end2.next==null){//如果链表2到尾节点了则将链表2中所剩下的最后一个节点插入链表1 while(end2!=null){ if(end1.val<=end2.val&&end1.next.val>=end2.val){ end2.next=end1.next; end1.next=end2; break; }else{ end1=end1.next; if(end1.next==null){//链表2最后的节点最大 end1.next=end2; break; } } } } returnnewNode; } } publicstaticvoidmain(String[]args){ ListNodelist1=newListNode(1); list1.next=newListNode(3); list1.next.next=newListNode(5); ListNodelist2=newListNode(2); list2.next=newListNode(4); list2.next.next=newListNode(6); System.out.println(Merge(list2,list1)); } //链表 publicstaticclassListNode{ intval; ListNodenext=null; ListNode(intval){ this.val=val; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。