Java链表
链表的每一个节点中除了要保存本身的内容之后,还要保存下一个节点的引用
简单的建立一个链表,表头是root
//=================================================
// File Name : linked list demo
//------------------------------------------------------------------------------
// Author : Common // 类名:Node
// 成员:1.节点内容
// 2.下一个节点
// 方法:1.得到节点内容
// 2.设置下一个节点
// 3.取得下一个节点
class Node {
private String data; //保存节点内容
private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容
this.data = data;
} public String getData(){ //得到节点内容
return this.data;
} public void setNext(Node next){ //设置下一个节点
this.next = next;
} public Node getNext(){ //取得下一个节点
return this.next;
}
}; //主类
//Function : linked list
public class linkdemo { //主方法
public static void main(String[] args) {
// TODO 自动生成的方法存根
Node root = new Node("火车头"); //定义根节点
Node n1 = new Node("车厢A"); //定义第1个车厢
Node n2 = new Node("车厢B"); //定义第2个车厢
Node n3 = new Node("车厢C"); //定义第3个车厢
root.setNext(n1); //火车头的下一个节点是第1个车厢
n1.setNext(n2); //第1个车厢的下一个节点是第2个车厢
n2.setNext(n3); //第2个车厢的下一个节点是第3个车厢
printNode(root);
} //输出方法,全局方法
//输出节点的内容
public static void printNode(Node node){
System.out.println(node.getData()); //输出数据
if(node.getNext() != null){ //判断节点是否为空
printNode(node.getNext()); //继续向下打印
}
} }
使用了内部类
在链表中进行删除、查询操作
//=================================================
// File Name : linked list demo
//------------------------------------------------------------------------------
// Author : Common class Link{ // 成员:1.root
private Node root; //建立根节点 // 方法:1.添加节点方法
public void addNode(String data){
Node newNode = new Node(data); //建立一个新的节点
if(this.root == null){
this.root = newNode; //如果没有根节点,则把上面建立的节点设置成根节点
}else{
this.root.add(newNode); //如果有根节点,则把上面建立的节点设置成root节点后非空的节点
}
}; // 方法:2.输出全部节点方法
public void printNode(){ //输出节点的内容
if(this.root != null){ //判断是否存在根节点
this.root.print(); //继续向下打印
}
}; // 方法:3.判断元素是否存在
public boolean contains(String name){ //判断元素是否存在
return this.root.search(name); //调用Node类中的search()方法
}; // 方法:4.删除节点
public void deleteNode(String data){ //删除节点
if(this.contains(data)){ //判断节点是否存在
if(this.root.data.equals(data)){ //判断根节点是否满足要求
this.root = this.root.next; //将根节点之后的节点设置成根节点
}else{
this.root.next.delete(root, data); //删除节点
}
}
} // 内部类名:Node
// 成员:1.节点内容 2.下一个节点
// 方法:1.得到节点内容 2.设置下一个节点 3.取得下一个节点 4.添加下一个节点 5.从某处删除一个节点 6.节点的查询结果 7.输出方法
class Node {
private String data; //保存节点内容
private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容
this.data = data;
} public String getData(){ //1.得到节点内容
return this.data;
} public void setNext(Node next){ //2.设置下一个节点
this.next = next;
} public Node getNext(){ //3.取得下一个节点
return this.next;
} public void add(Node newNode){ //4.添加下一个节点
if(this.next == null){ //判断下一个节点是否为空
this.setNext(newNode); //如果下一个节点为空,则把新节点设置在next的位置上
}else{ //如果不为空,则表示还有下一个节点
this.next.add(newNode); //在下一个位置处增加
}
} public void delete(Node preNode,String data){ //5.从某处删除一个节点
if(data.equals(this.data)){ //找到了匹配的节点
preNode.next = this.next; //把前一个节点链接到后一个节点上
}else{
if(this.next != null){
this.next.delete(this, data); //继续向下找
}
}
} public boolean search(String data){ //6.定义搜索方法
if(data.equals(this.data)){ //判断当前节点的数据是否与查找的一致
return true;
}else{
if(this.next != null){ //如果下一个节点存在,就继续查找
return this.next.search(data); //返回下一个节点的查询结果
}else{
return false;
}
}
} public void print(){ //7.定义全部输出方法
System.out.print(this.data + "\t"); //没有判断是否存在根节点
if(this.next != null){ //如果下一个节点不为空的话,继续打印
this.next.print(); //继续打印下一个节点
}
} };
} //主类
//Function : linked list
public class linkdemo { //主方法
public static void main(String[] args) {
// TODO 自动生成的方法存根
Link l = new Link();
l.addNode("A");
l.addNode("B");
l.addNode("C");
l.addNode("D");
l.addNode("E");
System.out.println("===========删除之前===========");
l.printNode();
l.deleteNode("C");
l.deleteNode("D");
System.out.println();
System.out.println("===========删除之后===========");
l.printNode();
System.out.println();
System.out.println("查询节点:"+l.contains("A"));
} }
Java链表的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- Java链表基本操作和Java.util.ArrayList
Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...
- JAVA链表中迭代器的实现
注:本文代码出自<java数据结构和算法>一书. PS:本文中类的名字定义存在问题,Link9应改为Link.LinkList9应该为LinkList.由于在同包下存在该名称,所以在后面接 ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- java 链表数据结构
首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了.下面直接进入正题: 先要定义一个结点类 ...
- Java 链表
按链表的组织形式分有ArrayList和LinkList两种.ArrayList内部其实是用数组的形式实现链表,比较适合链表大小确定或较少对链表进行增删操作的情况,同时对每个链表节点的访问时间都是co ...
- 算法_栈与队列的Java链表实现
链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: private class Node ...
- 学习记录 java 链表知识
01.import java.util.HashMap; 02.import java.util.Scanner; 03.import java.util.Stack; 04. 05./** 06. ...
- Java链表的一些操作:
[还有一些其他的算法提]http://blog.csdn.net/WalkingInTheWind/article/category/906980 [转]http://blog.csdn.net/lu ...
- 面试中的Java链表
链表作为常考的面试题,并且本身比较灵活,对指针的应用较多.本文对常见的链表面试题Java实现做了整理. 链表节点定义如下: static class Node { int num; Node next ...
随机推荐
- javascript生成GUID的代码
<script type="text/javascript"> var Guid = function(){}; Guid.prototype = { S4:funct ...
- [转]REST简介
转自:http://www.cnblogs.com/loveis715/p/4669091.html 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的 ...
- HTTP协议学习---(二)基本认证
什么是HTTP基本认证 桌面应用程序也通过HTTP协议跟Web服务器交互, 桌面应用程序一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64编码的字符串放在ht ...
- python3.x + selenium 3.x 遇到的问题:Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x0045E450>>
我解决了!!!from selenium import webdriverimport timedr = webdriver.Firefox(executable_path = '/Users/jin ...
- ps还能用脚本切片?
最近在慕课网上看有关于ps切图的视频,发现ps 切片的水还挺深的.这相当于我的一篇学习笔记吧.对于ps的基本切图我觉得对于前端人员来说就是a piece of cake.但是对于ps的精准切图,我不知 ...
- 如何更改IP地址的映射名字
windows系统下: 在C:\Windows\System32\drivers\etc\hosts里面添加你想对应的域名 如192.168.230.134 weekend110 注意:这要有管理员权 ...
- git 最基本的使用方法
1. git init ----初始化git仓库 2.git add . ----把代码添加到仓库 3.git commit -m '注释' ---commit:提交 -m:全部提交 ‘ ...
- javaweb项目打包成war包
从来没有想过web项目还能打包的,但是有要求,就不得不去实现,在网上找了一下,发现挺简单的. 首先是使用MyEclipse将web项目打包,如下图所示. 右键选中项目,选择export. 然后选择J2 ...
- Java中Unicode的编码和实现
Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次. 编码方式 字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值.“A”是一个字符,“ ...
- 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2271 Solved: 935[Submit][Stat ...