单向链表

作者:vashon

  1. package com.ywx.link;
  2. /**
  3. * 单向链表
  4. * @author vashon
  5. *
  6. */
  7. public class LinkTest {
  8. public static void main(String[] args) {
  9. Link l=new Link();
  10. l.addNode("A");
  11. l.addNode("B");
  12. l.addNode("C");
  13. l.addNode("D");
  14. l.addNode("E");
  15. System.out.println("==========增加之后的内容==========");
  16. l.printNode();
  17. System.out.println("\n包含D:"+l.contains("D"));
  18. System.out.println("==========删除之前的内容==========");
  19. l.deleteNode("A");
  20. System.out.println("==========删除之后的内容==========");
  21. l.printNode();
  22. }
  23. }
  24. class Link{//链表的完成类
  25. class Node{//保存每个节点
  26. private String data;//节点内容
  27. private Node next;//下一个节点
  28. public Node(String data){
  29. this.data=data;
  30. }
  31. public void add(Node newNode) {//将节点加入到合适的位置
  32. if(this.next==null){
  33. this.next=newNode;
  34. }else{
  35. this.next.add(newNode);
  36. }
  37. }
  38. public void print() {//输出节点的内容
  39. System.out.print(this.data+"\t");
  40. if(this.next!=null){
  41. this.next.print();//递归调用输出
  42. }
  43. }
  44. public boolean search(String data){//内部搜索的方法
  45. if(data.equals(this.data)){
  46. return true;
  47. }else{
  48. if(this.next!=null){//向下继续判断
  49. return this.next.search(data);
  50. }else{
  51. return false;
  52. }
  53. }
  54. }
  55. public void delete(Node previous, String data) {
  56. if(data.equals(this.data)){//找到了匹配的节点
  57. previous.next=this.next;//空出当前的节点
  58. }else{
  59. if(this.next!=null){
  60. this.next.delete(this, data);//继续查找
  61. }
  62. }
  63. }
  64. }
  65. private Node root;//链表中的根节点
  66. public void addNode(String data){//增加节点
  67. Node newNode=new Node(data);
  68. if(root==null){
  69. root=newNode;
  70. }else{
  71. root.add(newNode);
  72. }
  73. }
  74. public void printNode(){//链表的输出
  75. if(root!=null){
  76. root.print();
  77. }
  78. }
  79. public boolean contains(String name){//判断元素是否存在
  80. return this.root.search(name);
  81. }
  82. public void deleteNode(String data){//链表删除节点
  83. if(this.contains(data)){
  84. if(this.root.data.equals(data)){//如果是根节点
  85. this.root=this.root.next;//修改根节点
  86. }else{
  87. this.root.next.delete(root,data);//把下一个节点的前节点和要删除的节点内容一起传入
  88. }
  89. }
  90. }
  91. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

java实现单向链表的增、删、改、查的更多相关文章

  1. Java操作MongoDB:连接&增&删&改&查

    1.连接 ①方式一 MongoClientOptions.Builder builder = MongoClientOptions.builder(); //可以通过builder做各种详细配置 Mo ...

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  4. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  5. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  9. Java实现单向链表的增删改查

    class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...

随机推荐

  1. open调用过程

    1. 首先传到vfs的do_sys_open,在open.c中. long do_sys_open(int dfd, const char __user *filename, int flags, u ...

  2. LA-5052 (暴力)

    题意: 给[1,n]的两个排列,统计有多少个二元组(a,b)满足a是A的连续子序列,b是B的连续子序列,a,b中包含的数相同; 思路: 由于是连续的序列,且长度相同,可以枚举一个串的子串,找出这个子串 ...

  3. CentOS 6.5升级到CentOS 7

    CentOS7 已经发布了,之前一直想在上面测试一下,一直没有机会,这次终于可以感受一下CentOS7了.一直使用CentOS6.5有一段时间了,但是由于它的内核版本依然停留在2.6.32,所以决定升 ...

  4. vue项目中的路径别名

    每次写引入组件的路径,如果路径嵌套比较深,那么会比较麻烦,我们可以在webpack.base.conf.js,中设置路径的别名,默认webpack设置src的别名为@ 建议配置src下一级目录的别名, ...

  5. Sublime text 安装Package Control

    Package Control 插件是一个方便 Sublime text 管理插件的插件,但因为 Sublime Text 3 更新了 Python 的函数,API不同了,导致基于 Python 开发 ...

  6. eclipse整合tomcat

    首先确保jdk已经安装好 步骤1 获得服务器运行环境配置,Window/Preferences/Server/Runtime Environmen l步骤2 添加服务器 步骤3 选择服务器在硬盘的地址 ...

  7. gitbucket

    github固然强大,但不怎么适合企业级的开发版本管理,原因相信大家都明白,首先在github上上传和拉取代码速度是比较慢的,再者,在Github上创建一个私有仓库是收费的,那么gitbucket是一 ...

  8. HDU 1270 小希的数表 (暴力枚举+数学)

    题意:... 析:我们可以知道,a1+a2=b1,那么我们可以枚举a1,那么a2就有了,并且a1+a3=b2,所以a3就有了,我们再从把里面的剩下的数两两相加,并从b数组中去掉, 那么剩下的最小的就是 ...

  9. Codeforces - 1117E - Crisp String - 进制 - 交互

    https://codeforces.com/problemset/problem/1117/E 就用abc表示数字来给每个数编码,编完直接问出移动的结果,反构造就行了,比C和D还简单. #inclu ...

  10. 51nod 1428【贪心】

    思路: 就是先排序,然后对每个取最小的结束时间. #include <bits/stdc++.h> using namespace std; typedef long long LL; c ...