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;i length()-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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。