欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java单向链表操作详解

发布时间:2025/4/16 java 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java单向链表操作详解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
/* 先定义一个Node类用来存储节点的值域和指针域* 即当前节点中的值和后面节点的方法* 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法*/ class LNode{//这个写法已经非常固定了 设置两个属性分别用set函数和get函数来得到这两个属性private int data;private LNode next;//这个和String应该比较相似的用法,类名用来表示数据类型,表示next的数据类型也是节点public void setData(int data){this.data = data;}public int getData(){return this.data ;}public void setNext(LNode next){this.next = next;}public LNode getNext(){return this.next;} } /** 定义一个链表主类,并且定义各种对链表操作的方法*/ public class Linklist {public LNode head;//定义一个头结点/** 定义一个创建链表的方法* 该方法称之为 :尾插法:新产生的节点从尾部插入链表*/public void createlink(int [] a){LNode pnew;//定义pnew表示新产生的结点LNode ptail=new LNode();//为尾节点分配堆内存head=ptail;//初始时是头结点与尾节点相等for(int i=0;i<a.length;i++){pnew=new LNode();//为新产生的节点分配堆内存pnew.setData(a[i]);//传递data值ptail.setNext(pnew);//把新产生的节点设置为ptail的后继节点pnew.setNext(null);//把新产生的节点的后继节点设为空ptail=pnew;//移动 ptail节点的位置使之一直指向尾部}}/** 定义判断链表中元素是否存在的方法*/public void seachlink(int value){LNode ptr;ptr=head.getNext();while(ptr!=null){//在节点非空的情况下寻找匹配的的值if(value==ptr.getData()){//匹配成功是System.out.println("找到数据:"+ptr.getData());break;//退出循环}else{//当当前值不是要查找的值时,查找下一个ptr=ptr.getNext();} }if(ptr==null)//链表遍历完毕,没有找到时System.out.println("链表中没有要查找数据");} /** 定义一个删除节点的方法*/public void deletelink(int value){LNode ptr;LNode p;p=head;ptr=head.getNext();while(ptr!=null){if(value==ptr.getData()){//判断链表中的当前值是否是要删除的节点p.setNext(ptr.getNext());//把ptr的后继节点设置为p的后继节点,即在形式上在链表中删除了ptr节点// System.gc();System.out.println("删除数据"+value+"成功!");break;}else{p=ptr;//p指向ptr位置ptr=ptr.getNext();//ptr指向其直接后继位置}}if(ptr==null)System.out.println("链表中没有要删除的数据!");} /** 定义插入节点的方法*/public void insertlink(int pos,int value){//两个参数,一个表示插入的位置,另一个表示插入的值LNode ptr;LNode pnew;//实例化新节点ptr=head.getNext();while(ptr!=null){if(pos==ptr.getData()){pnew=new LNode();pnew.setData(value);pnew.setNext(ptr.getNext());ptr.setNext(pnew);//System.out.println("插入数据"+value+"成功!");break;}else{ptr=ptr.getNext();}}if(ptr==null)System.out.println("插入数据失败!");}/** 定义一个输出链表内容方法*/public void printlink(){LNode ptr;//实例化一个节点ptr=head.getNext();//该节点取得头结点的后继节点while(ptr!=null){System.out.print(ptr.getData()+"->");ptr=ptr.getNext();}System.out.println(" NULL");}/** 下面给出一个测试用例,用数组创建一个整型的链表,并且把它输出 */public static void main(String args[]){int a[]=new int [10];for(int i=0;i<a.length;i++){a[i]=i;}Linklist list=new Linklist();list.createlink(a);System.out.println(" 链表输出如下:");list.printlink();System.out.println(" 插入元素后链表的输出如下:");list.printlink();} }

总结

以上是生活随笔为你收集整理的Java单向链表操作详解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。