作者:林子木  博客网址: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. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等

    去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...

  2. 16Oracle Database 系统权限和对象权限

    Oracle Database 系统权限和对象权限 Oracle中的系统权限和对象权限 DCL 数据控制语言 -- 查看对象的权限 grant / revoke 查看登录用户 Show user 查看 ...

  3. block教程

    http://pernghh.pixnet.net/blog/trackback/eac87d412e/33563409 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化 ...

  4. 最大子段和(洛谷P1115,动态规划递推)

    洛谷题目链接 题目赋值出来格式有问题,所以我就只放题目链接了 下面为ac代码 #include<bits/stdc++.h> #define ll long long using name ...

  5. 『 Luogu P3205 』 HNOI2010 合唱队

    解题思路 设置两个二维数组 $f$ 和 $g$,含义如下. $f[l][r]$ 表示在期望得到的队形中 $l\rightarrow r$ 这段区间初始队形排列的方案数,并且最后一个加入进去的是第 $l ...

  6. highcharts图表的常见操作

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. pace.js – 网页自动加载进度条插件

    网站顶部的页面加载进度条是怎么实现的,页面的加载进度百分比,有时候获取是比较麻烦的,当然也可以利用一些优秀的JavaScript插件来实现,今天就为大家介绍这样子的一款插件:pace.js. [官方网 ...

  8. nyoj 95 众数问题(set)

    众数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重 ...

  9. [K/3Cloud]K3Cloud的移动审批方面

    基于最新的K3Cloud2的SP2,当前K3Cloud上所有的工作流都可以在移动手机上进行移动审批,具体如下: K/3 Cloud 支持移动审批,支持安卓和IOS. 关于申请试用: 1.打开浏览器,进 ...

  10. [bzoj1613][Usaco2008 Jan]Running贝茜的晨练计划_动态规划

    Running贝茜的晨练计划 bzoj-1613 Usaco-2008 Jan 题目大意:题目链接(U组题题意真的是没法概括qwq....). 注释:略. 想法:一眼dp题. 状态:dp[i][j]表 ...