/* 先定义一个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. LIS,LDS的另类算法(原)

    自己在做有关俄罗斯套娃的题目时,发现自己写出的一个方法可以解决求最长上升子序列(LIS)和最长下降子序列(LDS)的问题. 俄罗斯套娃:这个问题在前一篇中讲的有,在此处就不多讲了~链接  求最长上升子 ...

  2. java_method_日期方法

    package cn.com.qmhd.tools; import java.text.SimpleDateFormat; import java.util.Calendar; import java ...

  3. php 生成mysql数据字典代码

    由于项目开发用了比较多的表 ,为了快速获取数据字典,通过php代码的方式来获取表结构和表注释.代码如下: <?php /** * 生成mysql数据字典 */ header ( "Co ...

  4. Linux定时任务编写

    由于需要定时备份数据库 我就在crontab -e中编写了这样的代码 十分钟备份一次 命名方式为年月日-时分秒.sql */10 * * * * /usr/bin/mysqldump -u root ...

  5. xml增强学习笔记

    2 Dom4j修改xml文档 2.1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt) wirter.wr ...

  6. (转)JS托管和最新的jQuery引用地址大全(jQuery最新版v1.9.0)

    什么是Google的js托管? 说的明白点,跟我们以往做法一样,只不过这时候的引用的js库是放在Google服务器上的.比如引用jquery,则使用路径http://ajax.googleapis.c ...

  7. UVA Mapping the Swaps

    题目例如以下: Mapping the Swaps  Sorting an array can be done by swapping certain pairs of adjacent entrie ...

  8. [CSS] Targeting Elements with CSS Attribute Selectors

    Beyond classes and IDs CSS also provides selectors to target element based on their attributes. In t ...

  9. QT实现多语言切换

    功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...

  10. iOS CoreData (1)

    下面开始学习一下CoreData. Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS). Core Data 为数据变更管理.对象存储.对象读取恢复的功能提供了支持. 它 ...