我们刚学数据结构的线性表顺序存储和链式存储,我写了一个实现部分基表操作的代码,大家看看有什么缺陷没。我测试了一下是没问题的。包括部分特殊情况。欢迎大家给点意见。public class Node {


public int data;
public Node next;
public Node front;//定义线性表的头节点
//多态的构造方法
public Node(){
next = null;
}
public Node(int data) {
this.data = data;
next = null;
}




/**
 * 方法initiate初始化线性表
 *
 */
public void initiate() {
front = null;//将头节点置空
}



/**
 * 方法length无参数,返回线性表中元素的个数
 * @return
 */
public int length() {
//分之一:线性表为空,则返回0
if(front == null) {return 0;}
//省略了分支二:线性表不为空
int length = 1;//初始时,length的值为1
Node current = front;//从头节点开始
while(current.next != null) {//一直到找到线性表的最后一个元素时停止
current = current.next;//逐个向前遍历
length++;//没移动一位,将length的值递加一次,length的值就记下了线性表元素的个数
}
return length;//返回length的值
}





/**
 * 方法add输入一个参数int类型的data,将数值为data的元素添加到线性表的最后面
 * @param data
 */ public void add(int data) {
Node newNode = new Node(data);
add(newNode);//实际上是调用了形参为Node类型的add方法
}

public void add(Node newNode) { //add方法解释与其他方法大致相同,此处略
if(front == null) {
front = newNode;
newNode.next = null;
return;
}
Node current = front;
while(current.next != null) {
current = current.next;
}
current.next = newNode;
newNode.next = null;
}





/**
 * 方法insert输入两个int类型的参数index和data,在线性表的第index个元素后面插入数值为
 *data的元素
 * @param index
 * @param data
 */
public void insert(int index,int data) {
Node newNode = new Node(data);//用第一个构造方法构造出要插入的节点
Node current = front;
Node prev = new Node();//定义遍历线性表元素时当前节点的前一个节点,用于插入处理时操作用
//分支一:要插入的地方超出了线性表的长度,调用add方法将它放在最后面,并打印出相关的信息提示用户
if(index > length()) {
System.out.println("输入的index数值超出了范围,已将其插入了最后面!");
add(data);
}
//分支二:插入的地方未超出范围,将它放在index之后一位
else {
for(int i = 1;i <= index;i++) {
prev = current;//记住当前节点的前一节点
current = current.next;//从第一个节点开始,向前遍历直到找到第index个元素
}
newNode.next = current;//将插入的节点指向第index个元素的后面的元素
prev.next = newNode;//将第index个元素指向插入的节点
}
}





/**
 * 方法delete输入一个int类型的参数index,删除线性表中第index个元素
 * @param index
 */
public void delete(int index) {
Node prev = new Node();
Node current = front;
if(index == 1 ){
front = front.next;
}
for(int i = 1;i < index;i++) {
prev = current;
current = current.next;
}
prev.next = current.next;
}



/**
 * 方法traverse将线性表中的元素依次打印出来
 *
 */
public void tranverse() {
if(front == null) {System.out.println("线性表中没有元素");}
Node current = front;
while(current != null) {
System.out.print(current.data + " ");
current = current.next;
}

}



/**
 * 方法locate输入一个int类型的参数data,返回线性表中元素的数值为data的元素的位置值。
 * 如果没有这个元素则,返回-1
 * @param data
 * @return
 */
public int locate(int data) {
Node current = front;
int length = 1;
try {
while(current.data != data) {
current = current.next;
length++;
}
}
catch(NullPointerException e) {
return -1;
}
return length;
}



/**
 * 方法get输入参数index,返回线性表中第index个元素的值
 * @param index
 */
public void get(int index) {
Node current = front;
if(index <= 0 || index >= length()) {
System.out.println("index超出范围了");
}
else {
for(int i = 1;i < index;i++) {
current = current.next;
}
System.out.println(current.data);
}
}


/**
 * 方法isEmpty无参数,如果线性表为空返回1,否则返回0
 * @return
 */
public byte isEmpty() {
if(front == null) {
return 1;
}
else {
return 0;
}
}


/**
 * 方法clear清空线性表
 *
 */
public void clear() {
front = null;
}

}
好奇怪啊,它怎么弹出一个信息框说我无权发这么多分的帖子