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;}
其中,不帶頭結點的運行有問題,不知道在哪裡,需要再調試。。。很詭異的錯誤,不知道哪裡錯了,希望有高手指點。