java实现简单链表

本链表实现的基本的增删该查功能,

package org.cn.test;
public class Node {
private int data;
public  Node next;
public Node(){

}

public Node(int data){
this.data=data;

}

public void display(){
System.out.println("data==>"+this.data);
}
public int getData(){
return this.data;
}
public void setDate(int data){
this.data=data;
}
}

以上为基本的节点vo类,接下来是正式链表的创建:

package org.cn.test;
public class MyLink {
public  Node first; //链表的头节点
public  Node last; //链表的最后一个节点
private int position=0;
public MyLink(){
this.first=null;
this.last=null;
}
public void addNode(int data){//添加节点
Node node=new Node(data);
node.next=null;
if(first==null || last==null){
first=new Node();
last=node;
first.next=last;
}
last.next=node;
last=node;
}
public int getLinkLength(Node node){//获得链表的长度
int len=0;
Node temp=first;
while((temp=temp.next)!=null){
len++;
}
return len;
}
public Node findNodeByIndex(int index){//根据索引查找节点
Node temp=first;
int len=this.getLinkLength(temp);
if(index>len){
System.out.println("要查找的下标超过了链表的长度");
return null;
}
while(position!=index){
position++;
temp=temp.next;
}
return temp;
}
public Node findNodeByDate(int data){//根据内容值查找结点
Node temp=first;
while(temp.getData()!=data){
temp=temp.next;
if(temp==null){
break;
}
}
return temp;
}
public boolean isContainData(int data){//查询链表是否包含指定的内容
boolean flag=false;
Node node=first;
while(node!=null){
if(node.getData()==data && (Integer)node.getData()!=null){
flag=true;
break;
}
node=node.next;
}
return flag;
}
public void deleteNode(int data){//删除节点
Node previous=null;
Node current=first;
boolean flag=this.isContainData(data);
if(!flag){
System.out.println("要删除的内容不存在");
return;
}
while(current.getData()!=data){
previous=current;
current=current.next;
if(current==null){
break;
}
}
previous.next=current.next;
current=null;
}
public void printNode(){//遍历链表
Node node=first;
while(node.next!=null){
node.display();
node=node.next;
}
node.display();
}
public void updateNode(int index,int data){//根据索引更新链表
Node node=first;
while(position!=index){
node=node.next;
position++;
}
node.setDate(data);
}
}



注意在删除查询的时候要查询链表是否有内容,删除索引不要超过链表的长度等等。

以下为测试类:

package org.cn.test;
public class MyLinkTest{
public static void main(String args[]){
MyLink link=new MyLink();
link.addNode(5);
link.addNode(6);
link.addNode(7);
link.addNode(8);
link.addNode(9);
link.addNode(10);
link.addNode(13);
//link.updateNode(2, 22);
//link.printNode();
Node node=link.findNodeByIndex(10);
int len=link.getLinkLength(link.first);
System.out.println("len=="+len);
if(node!=null){
node.display();
}
link.deleteNode(6);
link.printNode();
}
}


欢迎来信一起探讨,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值