链表
来源:互联网 发布:淘宝店铺模板怎么用 编辑:程序博客网 时间:2024/05/17 09:03
链表是一个数组,这个数组中的每个元素都是一个 类(对象),我们暂时管这个类叫node,node类除了基础信息,比如id、name这些,还需要把node类作为自己的属性,比如是nextnode,或者prenode,这个属性中可以存储相邻的link信息,这样每个元素都是和相邻元素可以互相找到的,就像个链条一样。这个链表解决的经典问题就是约瑟夫问题。
class Node{
int num;
Node nextNode=null;
public Node(int no){
this.num=no;
}
}
环形链表
class cycLink{
需要记录第一个位置的node用于和尾部Node关联,和一个临时node记录相邻关系
Node firstNode=null;
Node tmpNode=null;
int len=0; 记录有链表有几个元素
public void setLen(int len){
this.len=len;
}
初始化环形链表
public void createLink(){
//第一个和最后一个很特别,因为他们要互相关联
for (int i=1; i<len;i++){
if (i==1){
Node nd = new Node(i);
this.firstNode=nd;
this.tmpNode=nd;
}else{
if (i!=len){ 第1个和最后一个特殊处理
Node nd = new Node(i);
tmpNode.nextNode=nd;
tmpNode=nd;
}else{
先处理倒数第2个
Node nd =new Node(i);
tmpNode.nextNode=nd;
把最后一个放到临时node中,并指向链表头
tmpNode=nd;
tmpNode.nextNode=this.firstNode
}
}
}
}
}
用来测试打印链表内容
public void show(){
Node temp = this.firstNode;
do {
system.out.println(temp.num);
temp=temp.nextNode;
}while(temp!=this.firstNode);
}
public static void main(string[] args){
cycLink cl= new cycLink();
cl.setLen(9);
cl.createLink();
cl.show();
}