Java 实现简答的单链表的功能
作者:林子木 博客网址: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 实现简答的单链表的功能的更多相关文章
- java编写带头结点的单链表
最近在牛客网上练习在线编程,希望自己坚持下去,每天都坚持下去练习,给自己一个沉淀,不多说了 我遇到了一个用java实现单链表的题目,就自己在做题中将单链表完善了一下,希望大家作为参考也熟悉一下,自己 ...
- Java数据结构-线性表之单链表LinkedList
线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...
- Java: 实现顺序表和单链表的快速排序
快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...
- java实现一个简单的单链表反转
自定义一个单链表,实现链表反转: 1.普通方法实现 2.递归方式实现 package listNode; public class ReverseNode { public static void m ...
- 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入
什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...
- c++单链表基本功能
head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...
- 十、JAVA面试简答
2.ASCII编码表的常识 3.&和&&,|和||的区别 下面我们就分成三组对问题进行分析:分别是&和&&,|和||及~和!. 1.&是按位与操 ...
- python--自己实现的单链表常用功能
最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...
- 用java实现一个简单的单用户登陆功能的思路
引用 所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A ...
随机推荐
- Farseer.net轻量级开源框架 入门篇:查询数据详解
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: Where条 ...
- centos右上角wired图标消失有效解决方案
最近在学习Linux配置nginx时,左上角的wired图标突然没了,很神奇.然后在网上按着很多博客说的去改,都没用,最后终于根据下面参考博客内的方案解决了问题,嘿嘿. mv /var/lib/Net ...
- NOIP2018提高组省一冲奖班模测训练(一)
比赛链接 https://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 这次考试的题非常有质量 ...
- saltstack(四) saltstack的targeting、分组
targeting支持如下matcher: Globing : '*', 正则: 指定-E参数,正则表达式匹配多个 List: 指定-L参数,salt -E 'web1-(prod|devel)' t ...
- spring boot 的使用(一)
1. 启动spring-boot项目 mvn spring-boot:run cd target java -jar xxxx.jar xxxx代表生成的jar包
- java 访问对象私有变量
Captcha captcha = getCaptcha(captchaId); // 通过反射获取验证码值 Class<?> classType = captcha.getClass() ...
- 【Codeforces 1036C】Classy Numbers
[链接] 我是链接,点我呀:) [题意] 让你求出只由3个非0数字组成的数字在[li,ri]这个区间里面有多少个. [题解] 只由3个非0数字组成的数字在1~10^18中只有60W个 dfs处理出来之 ...
- Java基础学习总结(76)——Java异常深入学习研究
异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 异常处理的流程 当程序中抛 ...
- cocos2dx 2.1.x 退出SDK相关界面后EGLView 不刷新渲染
报错内容为: [3390:1456879] failed to call contextcocos2d: surface size: 0x0[3390:1456879] Failed to make ...
- JavaSE 学习笔记之正则表达式(二十五)
正则表达式:其实是用来操作字符串的一些规则. 好处:正则的出现,对字符串的复杂操作变得更为简单. 特点:将对字符串操作的代码用一些符号来表示.只要使用了指定符号,就可以调用底层的代码对字符串进行操作. ...