9、单链表的合并,两个有序单链表,合并为一个有序链表。
2012-09-11 11:30
435 查看
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;}其中,不带头结点的运行有问题,不知道在哪里,需要再调试。。。很诡异的错误,不知道哪里错了,希望有高手指点。
相关文章推荐
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 3.两个有序单链表合并为一个有序的单链表
- 数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
- 每天一个小算法(2)----合并两个有序链表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 合并两个有序链表形成一个新的有序链表
- 两个已经排好序的链表合并为一个有序链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
- 将两个有序链表合并成一个有序链表——搜狐畅游笔试题归来
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值
- 两个有序链表合并为一个有序链表
- 两个无序单链合并成一个有序单链表
- 合并两个有序链表后组成一个更大一个有序链表
- Java将两个有序链表合并为一个有序链表、将两个有序数组合并成一个有序数组
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,要求用递归方法进行。
- 将两个有序链表合并成一个有序链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 将两个有序链表合并成一个有序链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,要求用递归方法进行。
- 合并两个单链表为递减有序的单链表