• 用内部类和外部类实现java链表


            在这里我将使用外部类和内部类两种方法来实现Java的链表,参考了java老师上课讲过的代码~

            主要思想是:首先要有一个Node类(节点类),其成员变量为String 类型的name,还有一个Node类型的next,作为指向下一个节点的指针;然后会设计增删查改四个方法(addNode()、printNode()、searchNode()还有deleteNode() 这里作简写~)。然后是一个LinkList类,它首先会有一个根节点(Node 类型的root),然后是增删查改四个方法,不要忘了还有创建根节点的方法~

            (⊙o⊙)…很不友好,因为我没怎么写注释。具体的代码如下(已调通):

      1 class LinkList {
      2     
      3     class Node{
      4         
      5         private String name;
      6         private Node next;
      7         public Node(String name){
      8             this.name=name;
      9         }
     10         public String getName(){
     11             return this.name;
     12         }
     13         
     14         //to add a node
     15         public void addNode(Node newNode){
     16             if(this.next==null){
     17                 this.next=newNode;
     18             }else{
     19                 this.next.addNode(newNode);//recursive call.it'll keep searching until finding a Node which doesn't have next node 
     20             }
     21         }
     22         
     23         //to print these nodes
     24         public void printNode(){
     25             System.out.print(this.name+"-->");
     26             if(this.next!=null){
     27                 this.next.printNode();
     28             }
     29         }
     30         //searching for a node
     31         public boolean searchNode(String name){
     32             if(this.name.equals(name)){
     33                 return true;
     34             }else{
     35                 if(this.next!=null){
     36                     return this.next.searchNode(name);
     37                 }else{
     38                     return false;
     39                 }
     40             }
     41         }
     42         
     43         //to delete a node
     44         public void deleteNode(Node preNode,String name){
     45             if(this.name.equals(name)){
     46                 preNode.next = this.next ;
     47             }else{
     48                 this.next.deleteNode(this,name) ;
     49             }
     50         }
     51     }
     52         
     53         
     54         private Node root;//root node
     55         
     56         //add
     57         public void add(String name){
     58             Node newNode = new Node(name);
     59             if(this.root==null){
     60                 this.root = newNode; 
     61             }
     62             else{
     63                 this.root.addNode(newNode);
     64             }
     65         }
     66         
     67         //print
     68         public void print(){
     69             if(this.root!=null){
     70                 this.root.printNode();
     71             }
     72         }
     73         
     74         //search
     75         public boolean search(String name){
     76             if(this.root!=null){
     77                 return root.searchNode(name);
     78             }
     79             else{
     80                 return false;
     81             }
     82         }
     83         
     84         //delete
     85         public void delete(String name){
     86             if(this.search(name)){//if the node exists 
     87                 if(this.root.name.equals(name)){
     88                     if(this.root.next!=null){
     89                         this.root = this.root.next ;
     90                     }else{
     91                         this.root = null ;
     92                     }
     93                 }else{
     94                     if(this.root.next!=null){
     95                         this.root.next.deleteNode(root,name) ;
     96                     }
     97                 }
     98             }
     99 
    100         }
    101 
    102     }
    103 
    104 
    105 public class InnerLinkListTest{
    106     
    107     public static void main(String[] args) {
    108         LinkList link = new LinkList();
    109         //add four node
    110         System.out.println("add a root node");
    111         link.add("root node");
    112         System.out.println("add a first node");
    113         link.add("first node");
    114         System.out.println("add a second node");
    115         link.add("second node");
    116         System.out.println("add a third node");
    117         link.add("third node");
    118         System.out.println("add a fourth node");
    119         link.add("fourth node");
    120         
    121         //print all of the nodes
    122         System.out.print("Now you haeve :");
    123         link.print();
    124         System.out.println("
    ");
    125         
    126         //search for the first node
    127         System.out.print("Does the first node exist?");
    128         if(link.search("first node")){
    129             System.out.println("  YES");
    130         }else{
    131             System.out.println("  NO");
    132         }
    133         System.out.println("
    ");
    134         System.out.print("Does the fifth node exist?");
    135         if(link.search("fifth node")){
    136             System.out.println("  YES");
    137         }else{
    138             System.out.println("  NO");
    139         }
    140         System.out.println("
    ");
    141         
    142         //delete the second node
    143         System.out.println("Delete the second node");
    144         link.delete("second node");
    145         System.out.print("Now you have :");
    146         link.print();
    147         System.out.println("
    ");
    148 
    149     }
    150 }

    运行结果是这样哒!!!

    然后是基本上一样的外部类:

      1 //Node类
      2 class Node{
      3     private String name;
      4     private Node next;
      5     public Node(String name){
      6         this.name=name;
      7     }
      8     public String getName(){
      9         return this.name;
     10     }
     11     public Node getNode(){
     12         return this.next;
     13     }
     14 
     15     //to add a node
     16     public void addNode(Node newNode){
     17         if(this.next==null){
     18             this.next=newNode;
     19         }else{
     20             this.next.addNode(newNode);//recursive call.it'll keep searching until finding a Node which doesn't have next node 
     21         }
     22     }
     23 
     24     //to print these nodes
     25     public void printNode(){
     26         System.out.print(this.name+"-->");
     27         if(this.next!=null){
     28             this.next.printNode();
     29         }
     30     }
     31 
     32     //searching for a node
     33     public boolean searchNode(String name){
     34         if(this.name.equals(name)){
     35             return true;
     36         }else{
     37             if(this.next!=null){
     38                 return this.next.searchNode(name);
     39             }else{
     40                 return false;
     41             }
     42         }
     43     }
     44 
     45     //to delete a node
     46     public void deleteNode(Node preNode,String name){
     47         if(this.name.equals(name)){
     48             preNode.next = this.next ;
     49         }else{
     50             this.next.deleteNode(this,name) ;
     51         }
     52     }
     53 }
     54 
     55 
     56 //Link类
     57 class Link{
     58     private Node root;//root node
     59 
     60     //add
     61     public void add(String name){
     62         Node newNode = new Node(name);
     63         if(this.root==null){
     64             this.root = newNode; 
     65         }
     66         else{
     67             this.root.addNode(newNode);
     68         }
     69     }
     70 
     71         //print
     72     public void print(){
     73         if(this.root!=null){
     74             this.root.printNode();
     75         }
     76     }
     77 
     78     //search
     79     public boolean search(String name){
     80         if(this.root!=null){
     81             return root.searchNode(name);
     82         }
     83         else{
     84             return false;
     85         }
     86     }
     87 
     88     //delete
     89     public void delete(String name){
     90         if(this.search(name)){//if the node exists 
     91             if(this.root.getName().equals(name)){
     92                 if(this.root.getNode()!=null){
     93                     this.root = this.root.getNode() ;
     94                 }else{
     95                     this.root = null ;
     96                 }
     97             }else{
     98                 if(this.root.getNode()!=null){
     99                     this.root.getNode().deleteNode(root,name) ;
    100                 }
    101             }
    102         }
    103 
    104     }
    105     
    106 }
    107 
    108 
    109 public class OuterLinkListTest {
    110     public static void main(String[] args) {
    111         Link link = new Link();
    112         //add four node
    113         System.out.println("add a root node");
    114         link.add("root node");
    115         System.out.println("add a first node");
    116         link.add("first node");
    117         System.out.println("add a second node");
    118         link.add("second node");
    119         System.out.println("add a third node");
    120         link.add("third node");
    121         System.out.println("add a fourth node");
    122         link.add("fourth node");
    123         
    124         //print all of the nodes
    125         System.out.print("Now you haeve :");
    126         link.print();
    127         System.out.println("
    ");
    128         
    129         //search for the first node
    130         System.out.print("Does the first node exist?");
    131         if(link.search("first node")){
    132             System.out.println("  YES");
    133         }else{
    134             System.out.println("  NO");
    135         }
    136         System.out.println("
    ");
    137         System.out.print("Does the fifth node exist?");
    138         if(link.search("fifth node")){
    139             System.out.println("  YES");
    140         }else{
    141             System.out.println("  NO");
    142         }
    143         System.out.println("
    ");
    144         
    145         //delete the second node
    146         System.out.println("Delete the second node");
    147         link.delete("second node");
    148         System.out.print("Now you have :");
    149         link.print();
    150         System.out.println("
    ");
    151     }
    152 }

    嗯!运行结果是一样的~就是这样!

  • 相关阅读:
    基于 HTML5 Canvas 的交互式地铁线路图
    基于HTML5的WebGL实现json和echarts图表展现在同一个界面
    基于HTML5和WebGL的3D网络拓扑结构图
    JavaScript基础:创建对象
    使用ksoap2报java.io.EOFException异常问题解决方法
    Silverlight之我见
    今年的IT大趋势是虚拟现实
    Apache服务器部署ASP.NET网站
    Bootstrap优秀网站:乐窝网
    [转载]C#读取Excel几种方法的体会
  • 原文地址:https://www.cnblogs.com/MissXu/p/5483642.html
Copyright © 2020-2023  润新知