使用java实现的链表,具有增删改查的功能。后面我会逐步的优化算法,并以此为基础功能实现栈、队列、二叉树以及图。
public class t_1 {
public static void main(String[] args){
link l = new link();
l.init();
for(int i=0;i<50;i++){
l.link_add(i);
}
System.out.println(l.length());
l.scan_link();
System.out.println("------------------------");
l.del_find_link(49);
System.out.println(l.find(40));
l.scan_link();
}
}
class lnode{
private int data;
private lnode next;
void setNext(lnode next){
this.next = next;
}
void setData(int data){
this.data = data;
}
int getData(){
return this.data;
}
lnode getNext(){
return this.next;
}
}
class link{
private int length;
lnode head;
void init(){
head = new lnode();
head.setNext(null);
head.setData(0);
this.length = 0;
}
int length(){
return this.length;
}
boolean link_is_empty(){
return (this.length == 0);
}
boolean link_add(int data){
lnode new_lnode = new lnode();
new_lnode.setData(data);
new_lnode.setNext(head.getNext());
head.setNext(new_lnode);
this.length++;
return true;
}
boolean scan_link(){
if(link_is_empty()){
System.out.println("嗨害嗨,这是个空表!");
return false;
}
lnode p = head.getNext();
System.out.println("-------链表内物品------");
for(int i=length();i>0;i--){
System.out.print(p.getData()+" ");
p = p.getNext();
}
System.out.println(" ");
System.out.println("---------------------");
return true;
}
int find(int data){
if(link_is_empty()){
System.out.println("空表,查个毛?");
System.exit(1);
}
int cache = 0;
lnode p = head.getNext();
for(int j=length();j>0;j--){
if(p.getData()==data){
cache = j;
}
p = p.getNext();
}
if(cache==0){
System.out.println("没有这个元素!");
System.exit(1);
}
return this.length-cache+1;
}
boolean del_find_link(int data){
int po = find(data) - 1;
lnode r = head.getNext();
lnode l = head;
for(int i=po;i>0;i--){
l = r;
r = r.getNext();
}
l.setNext(r.getNext());
this.length--;
return true;
}
}
以下为运行结果。