java实现简单单链表
本文实例为大家分享了java实现简单单链表的具体代码,供大家参考,具体内容如下
一、定义:
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)+指针(相当于JAVA中的引用,指示后继元素存储位置,),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
二、结构:
如图所示,data就是当前节点的数据,next是指针,指针存放的是内存地址,是当前结点的下一结点内存地址,顺着这个地址就能找到下一个结点。
三、代码实现:
packagecom.example.demo.linkedlist;
/**
*结点
*Createdbyxinanon2021/02/23
*/
publicclassNode{
publicIntegervalue;
publicNodenext;
publicNode(Integervalue){
this.value=value;
}
publicNode(Integervalue,Nodenext){
this.value=value;
this.next=next;
}
publicIntegergetValue(){
returnvalue;
}
publicvoidsetValue(Integervalue){
this.value=value;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetNext(Nodenext){
this.next=next;
}
}
packagecom.example.demo.linkedlist;
/**
*单链表
*Createdbyxinanon2021/2/23
*/
publicclassSingleLinkedList{
publicNodehead;
/**
*从头部添加
*@paramdata待添加数据
*/
publicvoidaddHead(Integerdata){
Nodenode=newNode(data);
node.next=head;
head=node;
}
/**
*从尾部添加
*@paramdata待添加数据
*/
publicvoidaddLast(Integerdata){
Nodenode=newNode(data);
if(head==null){
head=node;
return;
}
Nodetemp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=node;
}
/**
*获取链表的长度
*@return链表长度
*/
publicIntegerlength(){
intlength=0;
Nodetemp=head;
while(temp!=null){
temp=temp.next;
length++;
}
returnlength;
}
/**
*从指定下标处添加
*@paramindex指定下标
*@paramdata待添加的数据
*/
publicvoidaddByIndex(intindex,Integerdata){
if(index<0||index>length()){
System.out.println("插入下标不合规,请检查!");
return;
}
if(index==0){
addHead(data);
return;
}
Nodenode=newNode(data);
Nodetemp=head;
for(inti=1;ilength()){
System.out.println("删除下标不合规,请检查!");
return;
}
if(index==0){
head=head.next;
return;
}
Nodetemp=head;
for(inti=1;ilength()-1){
System.out.println("不存在此下标结点");
}
Nodetemp=head;
inti=0;
while(temp!=null){
if(i==index){
returntemp;
}
i++;
temp=temp.next;
}
returnnull;
}
/**
*打印链表值
*/
publicvoidprintLink(){
Nodetemp=head;
while(temp!=null){
System.out.println(temp.value);
temp=temp.next;
}
}
/**
*打印某个节点之后的所有值
*@paramnode
*/
publicstaticvoidprintAfterNode(Nodenode){
while(node!=null){
System.out.println(node.value);
node=node.next;
}
}
/**
*清除单链表
*/
publicvoidclearLink(){
head=null;
}
/**
*单链表反转
*@paramhead头节点
*/
publicNodereverseLink(Nodehead){
Nodeprev=null;
Nodecurr=head;
while(curr!=null){
NodenextTemp=curr.next;
curr.next=prev;
prev=curr;
curr=nextTemp;
}
returnprev;
}
/**
*测试
*@paramargs
*/
publicstaticvoidmain(String[]args){
SingleLinkedListlinkNode=newSingleLinkedList();
linkNode.addHead(2);
linkNode.addHead(3);
linkNode.addHead(5);
linkNode.addLast(9);
linkNode.addLast(7);
System.out.println("打印单链表:");
linkNode.printLink();
NodebyIndex1=linkNode.getByIndex(0);
System.out.println("获取下标为1的结点值:"+byIndex1.value);
linkNode.addByIndex(2,8);
System.out.println("下标2添加后打印单链表:");
linkNode.printLink();
linkNode.addByIndex(0,11);
System.out.println("下标0添加后打印单链表:");
linkNode.printLink();
linkNode.deleteByIndex(0);
System.out.println("下标0删除后打印单链表:");
linkNode.printLink();
Nodenode=linkNode.reverseLink(linkNode.head);
System.out.println("反转后打印单链表:");
printAfterNode(node);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。