java 单向链表

简单单向链表

[java] view
plain
copyprint?

  1. class Node{
  2. private String data; //存储当前节点内容
  3. private Node   next=null; //存储下一下节点
  4. public Node(String data){
  5. this.setDate(data);
  6. }
  7. public void setDate(String data){
  8. this.data = data;
  9. }
  10. public void setNext(Node next){
  11. this.next = next;
  12. }
  13. public String getDate(){
  14. return this.data;
  15. }
  16. public Node getNext(){
  17. return this.next;
  18. }
  19. }
  20. public class LinkDemo01
  21. {
  22. public static void main(String args[]){
  23. Node n1 = new Node("节点-A");
  24. Node n2 = new Node("节点-B");
  25. Node n3 = new Node("节点-C");
  26. Node n4 = new Node("节点-D");
  27. n1.setNext(n2);
  28. n2.setNext(n3);
  29. n3.setNext(n4);
  30. printNode(n1);
  31. }
  32. public static void printNode(Node node){
  33. System.out.println(node.getDate());
  34. if(node.getNext()!=null){
  35. printNode(node.getNext());
  36. }
  37. }
  38. }

单向链表整合内部类

[java] view
plain
copyprint?

  1. class Link
  2. {
  3. class Node
  4. {
  5. private String  data;
  6. private Node    next=null;
  7. public Node(String data){
  8. this.setData(data);
  9. }
  10. public void setData(String data){
  11. this.data = data;
  12. }
  13. public void setNext(Node next){
  14. this.next = next;
  15. }
  16. public String getData(){
  17. return this.data;
  18. }
  19. public Node getNext(){
  20. return this.next;
  21. }
  22. public void add(Node node){
  23. if(this.next==null){
  24. this.next = node;
  25. }else{
  26. this.next.add(node);
  27. }
  28. }
  29. public void print(){
  30. if(this.next==null){
  31. System.out.println(this.getData());
  32. }else{
  33. System.out.println(this.getData());
  34. this.next.print();
  35. }
  36. }
  37. public boolean search(String data){//内部搜索方法
  38. if(data.equals(this.data)){
  39. return true;
  40. }else{//向下继续判断
  41. if(this.next!=null){
  42. return this.next.search(data);
  43. }else{
  44. return false;
  45. }
  46. }
  47. }
  48. public void delete(Node previous,String data){
  49. if(data.equals(this.data)){
  50. previous.next = this.next;//空出当前节点
  51. }else{
  52. if(this.next!=null){
  53. this.next.delete(this,data);    //继续查找
  54. }
  55. }
  56. }
  57. }
  58. private Node root;      //根节点
  59. public void addNode(String data){
  60. Node newNode = new Node(data);      //创建新节点
  61. if(this.root==null){
  62. this.root = newNode;
  63. }else{
  64. this.root.add(newNode);
  65. }
  66. }
  67. public void printNode(){
  68. if(this.root!=null){
  69. this.root.print();//调用Node类中的输出操作
  70. }
  71. }
  72. public boolean contains(String name){
  73. return this.root.search(name);      //调用Node类的查找方法
  74. }
  75. public void deleteNode(String data){
  76. if(this.contains(data)){        //判断节点是否存在
  77. if(this.root.getData().equals(data)){
  78. this.root = this.root.next;     //修改根节点
  79. }else{
  80. this.root.next.delete(root,data);   //把下一个节点的前节点和数据一起传入进去
  81. }
  82. }
  83. }
  84. }
  85. public class LinkDemo02
  86. {
  87. public static void main(String args[]){
  88. Link l = new Link();
  89. l.addNode("节点-A");
  90. l.addNode("节点-B");
  91. l.addNode("节点-C");
  92. l.addNode("节点-D");
  93. //增加之后的内容
  94. l.printNode();
  95. //判断是否包含节点
  96. System.out.println(l.contains("节点-X"));
  97. l.deleteNode("节点-B");
  98. //删除之后的内容
  99. l.printNode();
  100. }
  101. }

总结:

1.类的职能不同,LinkDemo01是基础链表类,而LinkDemo02的内部类为基础链表类,外部类为链表操作类。

2.基础链表类中存在一个this.next指向下一个链表对象。

时间: 2024-10-11 03:21:49

java 单向链表的相关文章

Java单向链表操作详解

转自:http://blog.csdn.net/zxman660/article/details/7786354 —————————————————————————————————————————— /* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */ class LNode{//这个写法已经非常固定了 设置两个属性分别用set函数和get函数来得到这两个属性 private int da

java版的单向链表的逆序输出

将单向链表逆序输出,方法有三种: a.遍历链表,将每个节点的内容存入一个数组中,然后逆序输出数组(最简单的做法) b.使用栈来逆序输出 c.直接将链表逆序然后输出(本文采用的方法) 先介绍算法: 1). 若链表为空或只有一个元素,则直接返回: 2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继: 3). 重复2),直到q为空 4). 调整链表头和链表尾 示例:以逆序A->B->C->D为例,图示如下 package com.moluo.shujujiegou;

线性表的Java实现--链式存储(单向链表)

线性表的Java实现--链式存储(单向链表) 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在插入.删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢. 使用链式存储可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用内存空间,实现灵活的内存动态管理.但是链式存储失去了数组随机存取的特点,同时增加了节点的指针域,空

(原创)用Java实现链表结构对象:单向无环链表

转载请注明本文出处:http://www.cnblogs.com/Starshot/p/6918569.html 链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起.而单向链表就是:每个节点包含了当前节点的值和下一个节点引用.双向链表就是每个节点包含了当前节点的值和上下两个节点的引用.相对于数组结构,链表的增删效率会更加高. 这边文章主要讲怎么用Java实现一个简单的链表结构:单向无环链表.以及实现一些数据处理的方法. 首先,新建一个节点类(本次例子中的节点值都是字符串类型):

【转】单向链表(单链表)的Java实现

最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因为比较偏好,学习WinForm时比较认真,数据库操作也自己有所研究.但链表这个东西我 还真没有学习和研究过,加上最近自己在看WPF,而课程也到了JSP了,比较紧. 但是我还是抽了一个晚上加半天的时间看了一下单向链表.并且使用Java试着写了一个实例出来.没有接触过链表的朋友可以作为参考,希望大家多提

java版的单向链表的基本操作

首先定义链表节点的结构: package com.moluo.linklist; /** * * @author 行者摩罗 * */ public class Node { private int data; private Node next; public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getNext() { return next;

单向链表的简单Java实现-sunziren

写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的"阅读更多"按钮,惹不起我躲得起. 最近面试的过程中,发现有的公司的面试题考到了链表的逆序,这一块我正好不是特别清楚.于是打算把链表这一块好好的学习学习.在网上搜寻了众多的资料以后,了解到链表的核心是节点与节点之间的互相链接. 于是自己也写了一个单向链表的类,里面包括input插入方法,inputById按指定下标插入方法,deleteAll删除所有节

数据结构——Java实现单向链表

结点类: 1 /** 2 * @author zhengbinMac 3 * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. 4 */ 5 public class OnelinkNode { 6 // 保存结点的值 7 public int data; 8 // 保存后继结点的引用 9 public OnelinkNode next; 10 // 构造值为k的结点 11 public OnelinkNode(int

单向链表JAVA代码

//单向链表类 publicclassLinkList{       //结点类     publicclassNode{         publicObject data;         publicNode next;           publicNode(Object obj,Node next){             this.data = obj;             this.next = next;         }     }       Node head;