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 ...
随机推荐
- 0929mysql前缀索引如何找到合适的位数
前缀索引,是指对于VARCHAR/TEXT/BLOB类型的字段建立索引时一般都会选择前N个字符作为索引.索引很长的字符列,会让索引变得大且慢.索引开始的部分字符,这样可以大大节约索引空间,从而提高索引 ...
- android 监听短信并发送到服务器
1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容. 实例如下: SystemE ...
- 开发错误记录9:Application无法跳转到Activity
今天在做友盟消息推送,当客户端收到推送消息时,如客户端不是活动的,用如下代码 启动Activity发现无法启动,原因是原有的任务栈已消毁,判断启动是如消毁,如有,再新建一个 只要给它添加一个标志 就可 ...
- 【转】如何建立一个样式新颖的CSS3搜索框
在线演示 搜索框大概是web开发中最常用的UI元素之一,我想基本没有必要去介绍如何使用它.无论是网站还是web应用,都会为了增强用户体验而添加它,那么你是不是也想过设计一个别致的搜索框? 在今天的文章 ...
- nutch1.4 在windows下面提示 java.io.IOException: CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
eclipse运行nutch1.4在window下面提示异常解决 需要安装cynwin,被设置环境变量 1:安装cygwin 注:在选择要安装的软件包的时候我选择了在All这一行上后面的Default ...
- Mysql-windows下修改密码
忘记密码修改(以下各种方法视情况而使用,本人测试,有些都是案情况才可行,但都是有设置成功过) 注:修改密码成功后一定要记得刷新下权限(否则将导致不能使用当前用户连接) mysql>FLUSH P ...
- vim——打开多个文件、同时显示多个文件、在文件之间切换
打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...
- ajax文件下载
今天想做一个csv导出,想做ajax下载 JQuery的ajax函数的返回类型只有xml.text.json.html等类型,没有“流”类型,所以要实现ajax下载,不能够使用相应的ajax函数进行文 ...
- bzoj2565: 最长双回文串
manacher之后乱搞 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- matplotlib 柱状图、饼图;直方图、盒图
#-*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl m ...