两个递增链表合并
package mypack7;
public class test7 {
//输入两个单调递增的链表,输出两个链表合成之后的链表,
// 当然,我们合成的链表需要单调不递减
//假设我们有两个链表:A,B
/*
* A的头结点A1的值和 B的头结点b1的值 假设A1<B1 A1为为头结点
* A2和B1比较,假设B1小,A1指向B1
* A2再和B2比较,这样循环往复就行了*/
//总结小的留下,大的再比较
/*使用递归的方法*/
/*如果没有排序的话肯定不能这样排*/
public listNode Merge(listNode list1,listNode list2){
//首先传入两个链表
//当下面判断完了,要回来执行这个
if(list1==null){
return list2;
}
if (list2==null){
return list1;
}
//链表1 链表2的值比较
if(list1.val<list2.val){
//他是怎么将这些元素合并的 他并未将这些元素合并,而是改变指针指向实现的
//list1的值比较小的话,就把list1的val放在前面
list1.next=Merge(list1.next,list2);
return list1;
}else {
list2.next=Merge(list1,list2.next);
return list2;
}
//list2是怎么加在后面的
}
//list1.val<list2.val让list1前进
// list2.val<list1.val 让list2前进
public static void main(String[] args) {
listNode l1=new listNode(1);
listNode l2=new listNode(2);
listNode l3=new listNode(3);
listNode l4=new listNode(4);
listNode l5=new listNode(5);
l1.next=l2;
l2.next=l3;
l3.next=l4;
l4.next=l5;
listNode a=new listNode(8);
listNode b=new listNode(9);
listNode c=new listNode(10);
listNode d=new listNode(11);
listNode e=new listNode(12);
a.next=b;
b.next=c;
c.next=d;
d.next=e;
test7 test7=new test7();
listNode merge = test7.Merge(l1, a);
while (merge!=null){
System.out.println(merge.val);
merge=merge.next;
}
}
}
总结:list1.val<list2.val让list1前进比较 list2.val<list1.val 让list2前进比较,仅仅改变了指向。