题目:已知链表类的定义如下,实现各个成员函数。主函数中输入数据(以0结束)利用Insert函数依次将数据插入到表的1号位置,利用DispList按照逻辑次序输出表中元素,再输入一个要查找的元素,利用查找函数Locate查找其在表中的位置,最后利用Reverse函数将数据逆序,再利用DispList输出。
import java.util.Scanner;
//定义链表的结点类
class Node {
public Object data; //保存数据的变量
public Node next; //保存下一个结点的地址
//默认构造函数,初始化时不包含数据和下一个结点的地址
public Node() {
this(null,null);
}
//带有数据的构造函数,初始化时包含数据,但是没有下一个结点的地址
public Node(Object data) {
this(data,null);
}
//带有数据和下一个结点地址的构造函数
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
}
// 定义链表的操作类
class LinkList {
private Node node; //链表头结点
private int currth = 0; // 链表长度
//默认构造函数
public LinkList() {
node = new Node();
}
//向链表的指定位置插入数据x
public void insert(int i,Object x) throws Exception{
Node p = node;
int j = 0;
while(p!=null&&j<i-1) {
p = p.next;
j++;
}
if(p==null||j>i+1) { //如果i不合法则插入失败并抛出异常
throw new Exception("Illegal insertion position");
}
Node s = new Node(x); // 构造新的结点s
s.next = p.next;
p.next = s;
currth++; //链表长度加一
}
//查找元素obj在链表中的位置,如果找不到返回-1
public int get(Object obj) {
int i = 1;
Node p = node.next; //从链表地一个结点开始查找
while(p!=null&&!p.data.equals(obj)) {
p = p.next;
i++;
}
if(p!=null) {
return i;
}else
return -1;
}
//获取链表长度
public int length() {
return currth;
}
//打印链表所有的元素
public void display() {
Node dis = node.next;
while(dis!=null) { // 遍历链表并输出元素
System.out.print(dis.data+" ");
dis = dis.next;
}
System.out.println();
}
//反转链表
public void reverse() {
Node head = node,p = node.next,q = null;
head.next = null; //将原头节点去掉
while(p!=null) {
q = p.next; //保存下一个结点
p.next = head.next;
head.next = p; //插入新的头结点
p = q;
}
}
}
//主程序
public class Main {
public static void main(String[] args) throws Exception {
LinkList lis = new LinkList(); //创建一个新的链表
Scanner sc = new Scanner(System.in); //创建新的Scanner对象
int next = sc.nextInt(); //输入第一个元素
while(next!=0) { //输入元素直到为0
lis.insert(1, next); //向链表的头结点后插入新的元素
next = sc.nextInt();
}
//输出链表长度和元素
int length = lis.length();
System.out.println("The length:"+length);
System.out.println("The elements:");
lis.display();
//查找指定元素的位置
next = sc.nextInt();
if(lis.get(next)!=-1) {
System.out.println("Found position:"+lis.get(next));
}else {
System.out.println("No found");
}
//反转链表并输出
System.out.println("The length:"+length);
lis.reverse();
System.out.println("The elements:");
lis.display();
}
}