1、带头节点的单链表,
//定义结点类
class TestNode{
public int data;
public TestNode next = null;
public TestNode(int data){
this.data = data;
}
}
//链表合并
public class Merge {
public static void main(String[] args){
TestNode n00 = new TestNode(0);
TestNode n1 = new TestNode(1);
n00.next = n1;
TestNode n12 = new TestNode(2);
n1.next = n12;
//System.out.println(n1.next.data);
TestNode n13 = new TestNode(5);
n12.next = n13;
TestNode n14 = new TestNode(6);
n13.next = n14;
TestNode n20 = new TestNode(0);
TestNode n2 = new TestNode(3);
n20.next = n2;
TestNode n22 = new TestNode(7);
n2.next = n22;
TestNode n23 = new TestNode(8);
n22.next = n23;
TestNode n24 = new TestNode(9);
n23.next = n24;
TestNode n25 = new TestNode(10);
n24.next = n25;
TestNode h = merge(n00,n20);
TestNode p = h.next;
while(p != null){
System.out.println(p.data);
p = p.next;
}
}
public static TestNode merge(TestNode n1,TestNode n2){
TestNode p1 = n1.next;
TestNode head = n1;
TestNode p2 = n2.next;
TestNode p3 = n1;
while(p1!=null && p2!=null){
if(p1.data <= p2.data){
p3.next = p1;
p3 = p1;
p1 = p1.next;
}
else{
p3.next = p2;
p3 = p2;
p2 = p2.next;
}
}
if(p1==null && p2!=null){
p3.next = p2;
}else{
p3.next = p1;
}
return head;
}
}
2、不带头结点的单链表
//无头节点的两个有序链表合并为一个有序链表
public class ListMerge{
public static void main(String[] args){
Node n1 = new Node(1);
Node n2 = new Node(2);
n1.next = n2;
Node n3 = new Node(5);
n2.next = n3;
Node m1 = new Node(4);
Node m2 = new Node(6);
m1.next = m2;
Node m3 = new Node(9);
m2.next = m3;
Node m4 = new Node(10);
m3.next = m4;
Node q = merge(n1,m1);
while(q != null){
System.out.println(q.data);
q = q.next;
}
}
public static Node merge(Node n1,Node n2){
Node p1 = n1;
Node p2 = n2;
Node p3 = null;
Node head = null;
if(p1.data<p2.data){
head = n1;
p1 = p1.next;//开始的时候把这句忘了写了
}
else{
head = n2;
p2 = p2.next;//类似的,这句也不要忘了写.
}
p3 = head;
while(p1!=null && p2!=null){
if(p1.data<p2.data){
p3.next=p1;//p3指针链接第一个链表中的值,把第二个链表中的结点链到已排序的链
p3 = p1;//p3向前移动一个
p1 = p1.next;//p1向前移动一个
}
else{
p3.next = p2;//p3指针连接第二个链表中的值,把第二个链表中的结点链到已排序的链上
p3 = p2; //p3向前移动一个
p2 = p2.next;//p2向前移动一个
}
}
if(p1==null){//当p1中无元素的时候,即p1中所有元素已经被链接完了
p3.next = p2;
}
else{//当p2中无元素的时候
p3.next = p1;
}
return head;
}
}
//结点类
class Node{
int data;
Node next = null;
public Node(int data){
this.data = data;
}