两个有序链表序列的合并
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkNode l1=new LinkNode();
LinkNode node1=new LinkNode();
LinkNode node2=new LinkNode();
LinkNode l2=new LinkNode();
LinkNode node3=new LinkNode();
LinkNode node4=new LinkNode();
l1.next=node1;
node1.data=2;
node1.next=node2;
node2.data=4;
node2.next=null;
l2.next=node3;
node3.data=1;
node3.next=node4;
node4.data=3;
node4.next=null;
LinkNode l3=merge(l1,l2);
print(l3);
print(l1);
print(l2);
}
public static LinkNode merge(LinkNode l1,LinkNode l2){
if(l1.next==null && l2.next==null)
return l1;
if(l1.next==null)
return l2;
if(l2.next==null)
return l1;
LinkNode pa=new LinkNode();
LinkNode pb=new LinkNode();
LinkNode pc=new LinkNode();
LinkNode l3=new LinkNode();
pa=l1.next;
pb=l2.next;
l3=pc;
while(pa!=null && pb!=null){
if(pa.data<pb.data){
pc.next=pa;
pa=pa.next;
}
else{
pc.next=pb;
pb=pb.next;
}
pc=pc.next;
}
if(pa!=null)
pc.next=pa;
else
pc.next=pb;
l1.next=null;
l2.next=null;
return l3;
}
public static void print(LinkNode l){
if(l.next==null){
System.out.print(l.next);
}
LinkNode p=l;
while(p.next!=null){
p=p.next;
System.out.print(p.data+" ");
}
System.out.println();
}
}
class LinkNode{
int data;
LinkNode next;
}