package cn.dzp.flyroc.offer;
public class MergeDemo {
/*题目描述:输入两个单调递增的链表,输出两个链表合成后的链表
* 当然我们需要合成后的链表满足单调不减规则*/
/*思路:递归与非递归求解,小数放在前面*/
//代码实现
public static class ListNode{
int data;
ListNode nextNode = null;
ListNode(int data){
this.data = data;
}
}
public static ListNode Merge(ListNode list1, ListNode list2){
if (list1 == null){ //判断list1是否为空
return list2;
}
if (list2 == null){ //判断list2是否为空
return list1;
}
ListNode newHead = null; //建立一个新的头节点(用来存储比较后小的节点值)
if (list1.data <= list2.data){ //list1中的值小,将值放入头节点,头结点的下一个节点进行递归遍历
newHead = list1;
newHead.nextNode = Merge(list1.nextNode, list2);
}else { //list2中的元素小
newHead = list2;
newHead.nextNode = Merge(list1, list2.nextNode);
}
System.out.println("这是递归后的链表:"+newHead.data);
return newHead;
}
public static void main(String[] args){
ListNode list1 = new ListNode(1);
ListNode list3 = new ListNode(3);
ListNode list5 = new ListNode(5);
list1.nextNode = list3;
list3.nextNode = list5;
list5.nextNode = null;
ListNode list2 = new ListNode(2);
ListNode list4 = new ListNode(4);
ListNode list6 = new ListNode(6);
list2.nextNode = list4;
list4.nextNode = list6;
list6.nextNode = null;
Merge(list1, list2);
}
}