链表的含义是指线性表的链式存储。
链表有单链表,双链表,循环链表,这里只给出带头结点的单链表代码。
/**
* 带头结点的单链表类
* @author Administrator
*
*/
public class LinkedNode {
public Node root;//头结点
public Node tail;// 尾节点
public int size;//单链表长度
/**
* 在单链表末尾添加节点的方法
* @param node要添加的节点
*/
public boolean add(Node node){
if(root==null){
root=node;
tail=node;
return true;
}
tail.setNext(node);
tail=node;
size++;
return true;
}
/**
* 在指定位置插入元素
* @param index
* @param node
* @return
*/
public boolean add(int index,Node node){
if(index>=this.size)
return this.add(node);
else{
Node n=this.root;
for(int i=0;n.getNext()!=null&&i<index-1;i++){
n=n.getNext();
}
node.setNext(n.getNext());
n.setNext(node);
this.size++;
}
return true;
}
/**
* 查找指定位置的元素
* @param args
*/
public Object get(int index){
if(index<0||index>size)
return null;
Node node=root;
for(int i=0;i<index;i++){
node=node.getNext();
}
return node.getData();
}
/**
* 删除某一指定位置的元素
* @param index
*/
public Node delete(int index){
Node node=root;
if(index>=0){
for(int i=0;i<index-1&&node.getNext()!=null;i++){
node=node.getNext();
}
if(node.getNext()!=null){
if(node.getNext()==this.tail)
this.tail=node;
node.setNext(node.getNext().getNext());
this.size--;
}
}
return node;
}
}
/**
* 节点类
* @author Administrator
*
*/
public class Node {
private Object data;//数据域
private Node next;//引用域
public Object getData() {
return data;
}
public void setData(Student data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node node) {
this.next = node;
}
}
/**
* 测试类
* 将学生对象加入链表,按照分数非递减排序后并输出
*/
import java.util.Random;
public class Student {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public static void main(String[] args) {
LinkedNode link=new LinkedNode();
Random ran=new Random();
//添加节点
for(int i=0;i<10;i++){
Student stu=new Student();
int score=ran.nextInt(10)+1;
stu.setScore(score);
Node node =new Node();
node.setData(stu);
link.add(node);
}
//输出排序前
System.out.println("排序前"+link.size+"个学生分数:");
for(int i=0;i<link.size;i++){
Student st=(Student)link.get(i);
System.out.print(st.score+" ");
}
//排序
for(int i=0;i<link.size;i++){
for(int j=i;j<link.size;j++){
int max=0;
Student st=(Student)link.get(i);
Student st2=(Student)link.get(j);
if(st.score>st2.score){
max=st.score;
st.score=st2.score;
st2.score=max;
}
}
}
//输出排序后
System.out.println("\n");
System.out.println("排序后"+link.size+"的学生分数:");
for(int i=0;i<link.size;i++){
Student st=(Student)link.get(i);
System.out.print(st.score+" ");
}
}
}