一,问题描述
1,输入两个单调递增的链表,输出两个链表合成后的链表。新链表也是单调递增的。
二,程序如下(Java实现):
1,非递归合并有序链表
import java.util.*;
class ListNode{
int val;
ListNode next;
ListNode(int x)
{
val=x;
}
}
public class Test{
public ListNode Merge(ListNode node1,ListNode node2)
{
if(node1==null&&node2==null)
{
return null;
}
if(node1==null)
{
return node2;
}
if(node2==null)
{
return node1;
}
ListNode node3=null; //这个作为偏移指针
ListNode node4=null; //这个作为头指针
while(node1!=null&&node2!=null)
{
if(node1.val<=node2.val)
{
if(node4==null)
{
node3=node1;
node4=node1;
}
else
{
node3.next=node1;
node3=node3.next;
}
node1=node1.next;
}
else
{
if(node4==null)
{
node3=node2;
node4=node2;
}
else
{
node3.next=node2;
node3=node3.next;
}
node2=node2.next;
}
}
if(node1!=null)
{
node3.next=node1;
}
if(node2!=null)
{
node3.next=node2;
}
return node4;
}
public static void main(String []args)
{
Test test=new Test();
ListNode node11=new ListNode(1);
ListNode node12=new ListNode(3);
ListNode node13=new ListNode(5);
ListNode node14=new ListNode(7);
ListNode node15=new ListNode(9);
ListNode node21=new ListNode(2);
ListNode node22=new ListNode(4);
ListNode node23=new ListNode(6);
ListNode node24=new ListNode(8);
ListNode node25=new ListNode(10);
node11.next=node12;
node12.next=node13;
node13.next=node14;
node14.next=node15;
node21.next=node22;
node22.next=node23;
node23.next=node24;
node24.next=node25;
ListNode node=test.Merge(node11,node22);
while(node!=null)
{
System.out.print(node.val+"->");
node=node.next;
}
}
}
2,递归方式合并有序链表
import java.util.*;
class ListNode{
int val;
ListNode next;
ListNode(int x)
{
val=x;
}
}
public class Test{
public ListNode Merge(ListNode node1,ListNode node2)
{
if(node1==null)
{
return node2;
}
if(node2==null)
{
return node1;
}
if(node1.val<=node2.val)
{
node1.next=Merge(node1.next,node2);
return node1;
}
else
{
node2.next=Merge(node1,node2.next);
return node2;
}
}
public static void main(String []args)
{
Test test=new Test();
ListNode node11=new ListNode(1);
ListNode node12=new ListNode(3);
ListNode node13=new ListNode(5);
ListNode node14=new ListNode(7);
ListNode node15=new ListNode(9);
ListNode node21=new ListNode(2);
ListNode node22=new ListNode(4);
ListNode node23=new ListNode(6);
ListNode node24=new ListNode(8);
ListNode node25=new ListNode(10);
node11.next=node12;
node12.next=node13;
node13.next=node14;
node14.next=node15;
node21.next=node22;
node22.next=node23;
node23.next=node24;
node24.next=node25;
ListNode node=test.Merge(node11,node22);
while(node!=null)
{
System.out.print(node.val+"->");
node=node.next;
}
}
}
输出结果:
1->2->3->4->5->6->7->8->9->10