/* 先定义一个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();

}
}

http://blog.csdn.net/zxman660/article/details/7786354

Java实现单向链表的更多相关文章

  1. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  2. 数据结构——Java实现单向链表

    结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...

  3. java实现单向链表的增、删、改、查

    单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...

  4. java 实现单向链表

    package cn.com.factroy2; /** * 可以看做是操作链表的工具类,链表的核心结构就是节点的数据结构 * @author wanjn * */ public class Sing ...

  5. Java实现单向链表的增删改查

    class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...

  6. Java实现单向链表反转

    public class LinkedListTest { public static void main(String[] args) { Node A = new Node("A&quo ...

  7. [Java算法分析与设计]--单向链表(List)的实现和应用

    单向链表与顺序表的区别在于单向链表的底层数据结构是节点块,而顺序表的底层数据结构是数组.节点块中除了保存该节点对应的数据之外,还保存这下一个节点的对象地址.这样整个结构就像一条链子,称之为" ...

  8. JAVA单向链表实现

    JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点.数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点 ...

  9. 线性表的Java实现--链式存储(单向链表)

    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在 ...

随机推荐

  1. linux下安装php的swoole扩展模块(安装后php加载不出来?)

    应开发同事要求,需要安装php的扩展模块swoole.swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,而是为了提升网站的开发效率,以最少的性能损耗,换取最大的开发效率. 假设服 ...

  2. 内容提供者(Content Provider)——跨程序共享数据

    内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...

  3. How to easily concatenate text based on criteria in Excel? 如何将Excel中的文本按条件合并

    To combine text with the unique ID numbers, you can extract the unique values first and then create ...

  4. 知名IT企业待遇一览表

    115家IT公司待遇一览表       作者是西电通院2013届毕业硕士,依据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇例如以下,吐血奉献,公司比較全.下面绝对是各大公司2013届校招的数 ...

  5. 64位开源处理器Rocket该人士介绍

    最近大概读一点UCB发布时间Rocket处理器的源代码,的每个文件的源代码的功能有一定的一般理解,Mark一点点. Rocket是一家64bit标量处理器,5第一阶段管道,用途risc-v指令集.综合 ...

  6. android 双卡手机发短信/判断手机是否为双卡

    通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...

  7. SCADESuite嵌入式软件基于模型的开发

    SCADE Suite®产品是针对高安全性嵌入式软件的基于模型的开发环境 SCADE Suite是高安全性嵌入式软件的开发标准,其应用领域涵盖航空.国防.轨道交通.能源和重工业.专为最高等级的质量和安 ...

  8. cookie记录浏览记录

    cookie记录浏览记录 HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做 ...

  9. Android(java)学习笔记176:BroadcastReceiver之 短信发送的广播接收者

    有时候,我们需要开发出来一个短信监听器,监听用户发送的短信记录,下面就是一个案例,这里同样需要使用广播机制. 下面同样是代码示例,MainActivity.java 和  activity_main. ...

  10. find grep使用

    -------------------------------------find---grep---------------------------------------- 在当前目录下所有文件中 ...