java实现链表合并
http://zhidao.baidu.com/question/394830820.html?oldq=1&from=commentTo#reply-box-968647135
问题:
实训要求 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(i<link1.count && j<link2.count){
//依次扫描通过H1和H2的元素,比较当前的元素的值,将较小值的元素赋给H3
while(link1.getValue(i)<=link2.getValue(j)){
link3.addNode(link1.getValue(i));
i++;
}
while(link1.getValue(i)>link2.getValue(j)){
link3.addNode(link2.getValue(j));
j++;
}
//链表H1已经遍历完成,将链表H2余下内容赋给链表H3
if(i==link1.count-1){
while(j<link2.count){
link3.addNode(link2.getValue(j));
j++;
}
}
//链表H2已经遍历完成,将链表H1余下内容赋给链表H3
if(j==link2.count-1){
while(i<link1.count){
link3.addNode(link1.getValue(i));
i++;
}
}
}
//打印H3
for(int k=0;k<link3.count;k++){
System.out.print(link3.getValue(k)+", ");
}
}
}