作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin

參考网址:http://blog.csdn.net/sunsaigang/article/details/5751780

描写叙述:使用java实现简答的单链表的功能

定义了一个MyList类

包括的函数:

getHead()返回头指针。

isEmpty() 推断是否为空;

addFirst(T element)在链表的头部增加元素。

addLast(T element)在链表的尾部增加元。

add(T fix,T element)在指定元素fix后插入新的元素

remove(T element) 删除指定元素

contains(T element)查看是否包括某元素

printList()打印链表。

其它:

使用泛型

程序代码例如以下:

public class MyList<T>{ //使用泛型
/*
* 定义节点类Node
*/
private static class Node<T>{
T element;
Node<T> next;
Node(T element,Node<T> next){ //构造函数
this.element = element;
this.next = next;
}
Node(T element){ //构造函数
this(element,null); //调用上面的构造函数
}
} //定义MyList成员
private Node<T> head; //定义头结点 /*
*构造函数
*/
MyList(){
head = null;
}
/*
*返回头指针
*/
public Node<T> getHead(){
return head;
}
/*
*查看链表是否为空
*/
public boolean isEmpty(){
return null == head; //推断是否为空
} /*
*将元素增加链表头
*/
public void addFirst(T element){
if(isEmpty()) head = new Node<T>(element);
else head = new Node<T>(element,head);
}
/*
*将元素增加链表尾
*/
public void addLast(T element){
if(isEmpty()) head = new Node<T>(element);//假设为空
else {
Node<T> node = head; //不为空,就使用查找,知道表尾
while(node.next != null) node = node.next;
node.next = new Node<T>(element);
}
}
/*
*在指定元素后增加新元素
*/
public boolean add(T fix,T element){
if(isEmpty()) return false;
else {
Node<T> node = head; //定义中间变量
while(node.element != fix && null != node.next){//程序跳出条件为1、到表尾 2、找到这个元素
node = node.next; //查找是否含有元素
}
//这里採用直接使用while查找,而推断在while外面。能够加高速度
if(node.element == fix){ //这里首先推断是否找到元素
node.next = new Node<T>(element,node.next) ;//将element插入。并将element的next指向下一个元素
return true;
}
else
return false;
}
}
/*
*删除指定元素
*/
public boolean remove(T element){
if(isEmpty()) return false;
Node<T> node = head; //定义变量pre 和 node
Node<T> pre = null;
while(node.element != element && null != node.next){ //程序跳出条件为1、到表尾 2、找到这个元素
pre = node; //保存前面的变量
node = node.next; //指向下一个元素
}
if(node.element == element){
if(null == pre) //假设是指定元素是第一个元素
head = head.next;
else
pre.next = node.next;
return true;
}
else
return false;
}
/*
*查看是否包括某元素
*/
public boolean contains(T element){
if(isEmpty()) return false;
else {
Node<T> node = head;
while(node.element != element && null != node.next)//程序跳出条件为1、到表尾 2、找到这个元素
node = node.next; //不断指向下一个程序
if(node.element == element)
return true;
else
return false;
}
}
/*
*打印链表
*/
public void printList(){
if(isEmpty()){
System.out.println("null");
}
else{
for(Node<T> node=head; node!=null;node=node.next)
System.out.print(node.element +" ");
System.out.println(); //打印回车
}
} public static void main(String[] args) {
MyList<Integer> list = new MyList<Integer>();//若不加<Integer>便是为指定參数类型,将会警告
//使用了未经检查或不安全的操作。
//有关具体信息, 请使用 -Xlint:unchecked 又一次编译。
for(int i=0; i<10; i++){
list.addFirst(i);
}
list.printList(); //打印
list.remove(0); //删除
list.printList(); //打印
list.addLast(0); //在尾部增加
list.printList(); //打印 list.add(7,-7); //在7之后插入-7
list.printList(); //打印 if(list.contains(-7))
System.out.println("is in the list !");
else
System.out.println("is not in the list !");
}
}

Java 实现简答的单链表的功能的更多相关文章

  1. java编写带头结点的单链表

    最近在牛客网上练习在线编程,希望自己坚持下去,每天都坚持下去练习,给自己一个沉淀,不多说了 我遇到了一个用java实现单链表的题目,就自己在做题中将单链表完善了一下,希望大家作为参考也熟悉一下,自己 ...

  2. Java数据结构-线性表之单链表LinkedList

    线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...

  3. Java: 实现顺序表和单链表的快速排序

    快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...

  4. java实现一个简单的单链表反转

    自定义一个单链表,实现链表反转: 1.普通方法实现 2.递归方式实现 package listNode; public class ReverseNode { public static void m ...

  5. 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入

    什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...

  6. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  7. 十、JAVA面试简答

    2.ASCII编码表的常识 3.&和&&,|和||的区别 下面我们就分成三组对问题进行分析:分别是&和&&,|和||及~和!. 1.&是按位与操 ...

  8. python--自己实现的单链表常用功能

    最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...

  9. 用java实现一个简单的单用户登陆功能的思路

    引用 所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A ...

随机推荐

  1. Probabilistic locking in SQLite

    In SQLite, a reader/writer lock mechanism is required to control the multi-process concurrent access ...

  2. CMD命令行提示被禁用的情况下如何继续使用命令行工具执行命令

    1.直接在Windows搜索 左下 输入要执行的 CMD 命令单句.多句同时执行没有试出来. 暂时记录这一条.2016-12-20

  3. 用rownum先排序后分页

    今天突然想到rownum可以解决分页问题,于是做了各种实验,找个几个文章,最后有了一定成果. 现有表tablename,含有字段showorder,要求提取showorder的第11行到20行数据. ...

  4. java 23种设计模式 链接集锦

    创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法 http://www.cnblogs ...

  5. 12Oracle Database SQL程序

    Oracle Databse SQL 程序 程序块 在这之前,我们所有的sql语句都是一句一句执行的,如果我们把很多事情看作一个整体提交执行的话,必须使用程序块. 声明部分:声名变量及初始化 关键字: ...

  6. App后台开发运维和架构实践学习总结(5)——App产品从需求到研发到开发到上线到产品迭代全过程

    前言 如果没有做过开发,研发过产品的人,很难体会做产品的艰难,刚进公司的人,一般充当的是程序开发,我这里说的是开发,它与研发是有区别的. 一个需求下来,如果不能很好地理解产品需求,如果不能很好的驾驭需 ...

  7. mysql执行show processlist unauthenticated user 解决方法

    一台unibilling机器前几天突然负载变重. 在top中发现cpu被大量占用. agi程序运行的很慢,并出现僵尸进程. 其实当时只有50个左右的并发呼叫. 远远达不到正常水准. 重新启动机器问题也 ...

  8. HDU 4923 (贪心+证明)

    Room and Moor Problem Description PM Room defines a sequence A = {A1, A2,..., AN}, each of which is ...

  9. NetCore实现全局异常捕捉统一处理

    做net项目时候,在Global.asax文件中可以通过Application_Error方法全局捕获异常并处理后统一跳转到自定义的错误页面. 下面是我个人在NetCore项目中实现全局捕获异常并统一 ...

  10. c++面试问题的几个方向

    1 关于多态,面向对象的几个要点作为面向对象的程序员,这个问题是必须要弄清楚的,网上.教科书上都是标准答案,关键是理解内涵哦. 2 关于虚函数表和RTTI 这个Inside C++ Object Mo ...