问题:
实训要求1. 链表操作.要求: 有线性表H1和H2,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个链表表H3,要求H3的元素也是从小到大的升序排列。具体实现:将线性表H1=(23,45,67,89,90,123,145)和H2=(1,34,65,88,98,123,146,234,366)连接成一个新的线性表,并按升序排列输出。 算法思路:依次扫描通过H1和H2的元素,比较当前的元素的值,将较小值的元素赋给H3,如此直到一个线性表扫描完毕,然后将未完的那个链表中余下部分赋给H3即可。请用链式存储结构实现以上操作。
链表实现:
package com.jim.test; //链表类 class Link { Node head = null; Node point = null; Node newNode = null; public int count = 0;// 统计值 // 插入 public void addNode(int t) { newNode = new Node(); if (head == null) { head = newNode; } else { point = head; while (point.next != null) { point = point.next; } point.next = newNode; } point = newNode; point.vlaue = t; point.next = null; count++; } // 返回值 public int getValue(int i) { if (head == null || i < 0 || i > count) return -999999; int n; Node temp = null; point = head; for (n = 0; n <= i; n++) { temp = point; point = point.next; } return temp.vlaue; } } //节点类 class Node { int vlaue; Node next; } public class Test { public static void main(String[] args) { //H1=(23,45,67,89,90,123,145) Link link1=new Link(); link1.addNode(23); link1.addNode(45); link1.addNode(67); link1.addNode(89); link1.addNode(90); link1.addNode(123); link1.addNode(145); Link link2=new Link(); //H2=(1,34,65,88,98,123,146,234,366) link2.addNode(1); link2.addNode(34); link2.addNode(65); link2.addNode(88); link2.addNode(98); link2.addNode(123); link2.addNode(146); link2.addNode(234); link2.addNode(366); //H3 Link link3=new Link(); int i=0,j=0; while(ilink2.getValue(j)){ link3.addNode(link2.getValue(j)); j++; } //链表H1已经遍历完成,将链表H2余下内容赋给链表H3 if(i==link1.count-1){ while(j