/* 先定义一个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. jquery.qrcode.min.js生成二维码 通过前端实现二维码生成

    主体代码: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <tit ...

  2. Java如何等待子线程执行结束

    工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...

  3. inline-block元素之间出现间隙

    一.问题 这里部分的组成是一个input框和一个a按钮,然后a标签为了设置它的width和height我让他display:inline-block(行内元素以块级元素显示内容).神奇的一幕出现了,两 ...

  4. IOPS QPS TPS

    杨奇龙: http://blog.itpub.net/22664653/viewspace-767265/ http://blog.itpub.net/22664653/viewspace-76726 ...

  5. HDU2085JAVA

    核反应堆 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. 从源码角度理解android动画Interpolator类的使用

    做过android动画的人对Interpolator应该不会陌生,这个类主要是用来控制android动画的执行速率,一般情况下,如果我们不设置,动画都不是匀速执行的,系统默认是先加速后减速这样一种动画 ...

  7. Java基础知识强化之集合框架笔记49:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台

    1. 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台: 分析: A: 定义学生类    B: 创建一个TreeSet集合       C: 总分从高到底如何实现 ...

  8. ZeroClipboard.swf

    ZeroClipboard.config({             moviePath: "source/ZeroClipboard.swf",             hove ...

  9. 【Android】随时随地退出程序

    新建一个 ActivityCollector 类作为活动管理器,代码如下所示:public class ActivityCollector {public static List<Activit ...

  10. Tomcat 的 SSL 配置

    本教程使用 JDK 6 和 Tomcat 7,其他版本类似. 基本步骤: 使用 java 创建一个 keystore 文件 配置 Tomcat 以使用该 keystore 文件 测试 配置应用以便使用 ...