异质链表的Java实现
所谓异质链表即链表的节点类型可以不同。我实现的是四个公司,其中一个定义为基类公司BaseCompany,另外三个继承这个基类。另外创建了一个List类表示节点类,其中包含了一个head头结点。编号为0。从而可以任意顺序把这个四个类组成链表,并实现插入,删除,修改等方法。
公司类包含:
name:公司名称
boss:公司老板
next:指向公司的对象
id:公司编号
打印结果具体如下:
*****************************
创建链表的内容如下
*****************************
编号0 公司名称:null 老板:null
编号1 公司名称:Innovation Works 老板:Kai-Fu Lee
编号2 公司名称:Tecent 老板:Pony
编号3 公司名称:Baidu 老板:Robbin
编号4 公司名称:Google 老板:Larry Page
*****************************
删除其中的节点如下
*****************************
删除的是1号节点
删除的是4号节点
*****************************
修改2号公司的内容信息
*****************************
更新的是2公司名称和老板
*****************************
剩余节点如下
*****************************
编号0 公司名称:null 老板:null
编号2 公司名称:Apple 老板:Jobs
编号3 公司名称:Baidu 老板:Robbin
具体实现如下,程序有详细注释。
package com.zjw;
//公司基类
class BaseCompany {
String name; //公司名字
String boss; //公司老板
int id ; //公司编号
BaseCompany next; //指向后继节点的对象
//构造方法
BaseCompany(String name,String boss,int id){
this.name=name;
this.boss=boss;
this.id = id;
}
//指向后继节点的方法
void next(BaseCompany next){
this.next = next;
}
//显示自己信息的方法
void print(){
System.out.println("编号" + id + " 公司名称:" + name + " 老板:" + boss);
}
}
package com.zjw;
//子公司类1
class CompanyOne extends BaseCompany {
CompanyOne(String name, String boss,int id) {
super(name, boss,id);
}
}
package com.zjw;
//子公司类2
class CompanyTwo extends BaseCompany {
CompanyTwo(String name, String boss,int id) {
super(name, boss, id);
}
}
package com.zjw;
//子公司类3
class CompanyThree extends BaseCompany {
CompanyThree(String name, String boss,int id) {
super(name, boss, id);
}
}
package com.zjw;
//链表类
class List {
BaseCompany head = new BaseCompany("null", "null", 0);//头结点
BaseCompany p1 = head; //用来遍历的节点
BaseCompany p2 = head; //用来遍历的节点
int size = 0; //链表的真实大小
//节点的插入方法
void insert(BaseCompany baseCompany){
p1.next(baseCompany);
p1 = p1.next;
size++;
}
//节点的修改方法
void update(BaseCompany baseCompany,String name,String boss){
baseCompany.name = name;
baseCompany.boss = boss;
System.out.println("更新的是" +baseCompany.id + "公司名称和老板");
}
//节点的删除方法
void delete(BaseCompany baseCompany){
for(int i=0;i<size;i++){
if(p2.next == baseCompany){
p2.next = baseCompany.next;
baseCompany.next = null;
p2 = head;
size--;
System.out.println("删除的是" + baseCompany.id + "号节点");
break;
}
p2 = p2.next;
}
}
}
package com.zjw;
//测试类
public class Test {
public static void main(String[] args){
//生成四个公司的对象,生存链表的头结点
BaseCompany one = new BaseCompany("Innovation Works", "Kai-Fu Lee",1);
CompanyOne two = new CompanyOne("Tecent","Pony",2);
CompanyTwo three = new CompanyTwo("Baidu","Robbin",3);
CompanyThree four = new CompanyThree("Google","Larry Page",4);
List list = new List();
//任意的把四个对象组成一个链表,顺序自定
list.insert(one);
list.insert(two);
list.insert(three);
list.insert(four);
//循环的打印出来链表的内容
System.out.println("*****************************");
System.out.println(" 创建链表的内容如下");
System.out.println("*****************************");
BaseCompany pp = list.head;
for(int i=0;i<=list.size;i++){
pp.print();
pp = pp.next;
}
//任意删除其中的节点
System.out.println("*****************************");
System.out.println(" 删除其中的节点如下");
System.out.println("*****************************");
list.delete(one);
//list.delete(two);
//list.delete(three);
list.delete(four);
//修改2号公司的内容信息
System.out.println("*****************************");
System.out.println(" 修改2号公司的内容信息");
System.out.println("*****************************");
list.update(two,"Apple","Jobs");
//循环的打印出剩余链表的内容
System.out.println("*****************************");
System.out.println(" 剩余节点如下");
System.out.println("*****************************");
BaseCompany pp1 = list.head;
for(int i=0;i<=list.size;i++){
pp1.print();
pp1 = pp1.next;
}
}
}