/* 先定义一个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单向链表操作详解相关推荐

  1. 单向链表操作详解(二)[The End]

    /* 接着讲(测试编译时,请把相应的函数及测试代码放到上一讲代码的相关地方): 排序(选择.插入.冒泡) 插入(有序) */ /* ================================== ...

  2. 数据结构—单向链表(详解)

    一.链表基础 链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节点等.链表 ...

  3. Java中CAS操作详解

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...

  4. java switch 值_Java switch多值匹配操作详解

    这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...

  5. java io类库,Java利用io类库对各种文件的操作详解

    Java中文网 - Java利用io类库对各种文件的操作详解 java中提供了io类库,可以轻松的用java实现对文件的各种操作.下面就来说一下如何用java来实现这些操作. 新建目录 //Strin ...

  6. java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...

  7. java 链表逆转_java 实现单链表逆转详解及实例代码

    java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = nam ...

  8. java中的getnumber怎么用_java安全编码指南之:Number操作详解

    简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...

  9. java case 多个值_Java switch多值匹配操作详解

    这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...

最新文章

  1. HDU 1847 Good Luck in CET-4 Everybody!(组合博弈)
  2. 解决python发送multipart/form-data请求上传文件的问题
  3. CVPR‘22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
  4. github 使用总结-----转
  5. POJ 2778 DNA Sequence (AC自动机+矩阵快速幂)
  6. Codeforce 322E Ciel the Commander (点分治)
  7. 东莞理工学院计算机ccf,中国计算机学会东莞分部成立
  8. 今天将多线程的知识有回顾了下,总结了几点:
  9. Python数据库 -- SQL语句的语法问题(即对于字符串的特殊处理)
  10. 单元测试框架TestableMock快速入门(七):常用注解参数
  11. php外包如何逃离垃圾客户案例(转)
  12. 爬虫模式-JAVA获取省市区编码
  13. java内存溢出定位
  14. 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
  15. 反冲物料_父母有更多的时间休息,然后反冲开始了
  16. 【华人学者风采】程学旗 中国科学院
  17. 381个Android开源项目
  18. 深入剖析优惠券核心架构设计
  19. Spring Boot 优雅停机
  20. 【Linux入门学习教程】

热门文章

  1. Android应用程序键盘(Keyboard)消息处理机制分析(8)
  2. Azure负载均衡器Standard Load Balancer介绍
  3. SD-WAN5年增长率超过40%,为什么越来越受到企业欢迎?
  4. IntelliJ IDEA 前端调试(Js Debug)
  5. 《剑指offer》第十八题(在O(1)时间删除链表结点)
  6. NSUserDefaults 简介
  7. 在sublime-text中设置浏览器预览
  8. LeetCode 252. Meeting Rooms
  9. .NET资源文件实现多语言切换
  10. 将decimal类型的数据转成2.12这样价钱的显示方式