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 ...
随机推荐
- ajax的底层前后台交互
为什么用ajax或者它的优点: 异步加载数据,无需切换页面 更加的用户体验,局部刷新,及时验证,操作步骤简化: 节省流量 js控制数据的加载,更加灵活多用. 底层就是XMLHttpRequest对象: ...
- PHP几个常用的概率算法
算法一 /** * 全概率计算 * * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4) * @return string 返回上面 ...
- Linux 软件编译、安装、删除
本文学习内容 手动安装软件 手动安装下载源码的软件 源码编译3步骤 deb包-包依赖管理 dekg -l 查看所以安装deb的包 apt-get仓库安装(自动处理依赖问题) 640?wx_fmt=gi ...
- 并发编程学习笔记(8)----ThreadLocal的使用及源码分析
1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...
- 禁止foreach循环使用remove/add----快速失败
阿里巴巴开发手册中有一条: 7[强制]不要在 foreach 循环里进行元素的 remove / add 操作. remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterato ...
- LeetCode_16 3SumCloest
3Sum Closest Given an array nums of n integers and an integer target, find three integers in nums su ...
- [Java小程序]聊天室——Socket和ServerSocket的使用
这段小代码是因为担任Java助教给刚学习Java的本科大二的小学弟小学妹们指导,他们的实验作业就是编写一个Java聊天室客户端和服务器,为了避免出纰漏,自己事先写了一下. 客户端Ui代码: packa ...
- LINUX应用开发工程师职位(含答案)
就业模拟测试题-LINUX应用开发工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143989试卷录入者: ...
- PAT 1130 Infix Expression
Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with pa ...
- Unity高像素截图
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51386272 作者:car ...