定义节点类
链表的实现类
/**
* 链表的节点类
* @author se7en
*
*/
public class Node {
public int data;//元素的值
public Node Next;//链表指针,指向下一个元素
}
链表的实现类
/**
* 链表的实现类
* @author se7en
* 时间:2013年11月11日 23:37:56
*/
public class MyList {
private Node head = null;//链表的头指针
private int count = 0;//记录元素的个数
//添加方法,默认添加到最后
public void add(Node node){
add(node,count);
}
//添加到指定pos位置
public void add(Node node,int pos){
//如果添加未知错误
if(pos<0||pos>count){
System.out.println("添加未知错误!");
return;
}
//如果链表为空,直接将头指针指向node
if(count == 0){
head = node;
count++;
return;
}
//定义一个游标指针,并让其指向头节点
Node flag = head;
//循环找到要添加位置的上一个节点
for(int i=0;i<pos-1;i++){
flag = flag.Next;
}
//建立链接,添加元素
node.Next = flag.Next;
flag.Next = node;
count++;
}
//删除方法,默认在头删除
public Node remove(){
remove(0);
return null;
}
//删除指定位置pos的节点
public Node remove(int pos){
//如果删除未知错误
if(pos<0||pos>count-1){
System.out.println("删除位置错误!");
return null;
}
//如果链表为空
if(count == 0){
System.out.println("链表为空,删除错误!");
return null;
}
//定义一个游标指针flag,并让其指向头节点
Node flag = head;
//如果只有一个元素
if(count == 1){
head = null;
count = 0;
return flag;
}
//如果删除的是头节点,修改头指针
if(pos == 0){
head = head.Next;
flag.Next = null;
count--;
return flag;
}
//其他情况
//循环找到要删除未位置的前一个
for(int j=0;j<count-1;j++){
flag = flag.Next;
}
//定义一个临时指针temp,用来标记要删除的节点
Node temp = flag.Next;
//建立链接,删除节点
flag.Next = temp.Next;
temp.Next = null;
count--;
return temp;
}
//获取指定位置pos的元素
public Node get(int pos){
//定义一个游标指针,并让其指向头节点
Node flag = head;
//循环找到pos位置的节点
for(int k=0;k<pos;k++){
flag = flag.Next;
}
//复制一个要获取的节点,但next指向null
Node temp = new Node();
temp.data = flag.data;
temp.Next = null;
return temp;
}
//获取元素个数的方法
public int getSize(){
return count;
}
}