Java麵向對象基礎--鏈表的改進
采用內部類完成鏈表的操作
1、增加節點,在鏈表的最後進行增加
class Link{ // 鏈表的完成類 class Node{ // 保存每一個節點,此處為了方便直接定義成內部類 private String data ; // 保存節點的內容 private Node next ; // 保存下一個節點 public Node(String data){ this.data = data ; // 通過構造方法設置節點內容 } public void add(Node newNode){ // 將節點加入到合適的位置 if(this.next==null){ // 如果下一個節點為空,則把新節點設置在next的位置上 this.next = newNode ; }else{ // 如果不為空,則需要向下繼續找next this.next.add(newNode) ; } } public void print(){ System.out.print(this.data + "\t") ; // 輸出節點內容 if(this.next!=null){ // 還有下一個元素,需要繼續輸出 this.next.print() ; // 下一個節點繼續調用print } } }; private Node root ; // 鏈表中必然存在一個根節點 public void addNode(String data){ // 增加節點 Node newNode = new Node(data) ; // 定義新的節點 if(this.root==null){ // 沒有根節點 this.root = newNode ; // 將第一個節點設置成根節點 }else{ // 不是根節點,放到最後一個節點之後 this.root.add(newNode) ; // 通過Node自動安排此節點放的位置 } } public void printNode(){ // 輸出全部的鏈表內容 if(this.root!=null){ // 如果根元素不為空 this.root.print() ; // 調用Node類中的輸出操作 } } }; public class LinkDemo02{ public static void main(String args[]){ Link l = new Link() ; l.addNode("A") ; // 增加節點 l.addNode("B") ; // 增加節點 l.addNode("C") ; // 增加節點 l.addNode("D") ; // 增加節點 l.addNode("E") ; // 增加節點 l.printNode() ; } };
2、查找節點,依次遞歸的方式進行查找
class Link{ // 鏈表的完成類 class Node{ // 保存每一個節點,此處為了方便直接定義成內部類 private String data ; // 保存節點的內容 private Node next ; // 保存下一個節點 public Node(String data){ this.data = data ; // 通過構造方法設置節點內容 } public void add(Node newNode){ // 將節點加入到合適的位置 if(this.next==null){ // 如果下一個節點為空,則把新節點設置在next的位置上 this.next = newNode ; }else{ // 如果不為空,則需要向下繼續找next this.next.add(newNode) ; } } public void print(){ System.out.print(this.data + "\t") ; // 輸出節點內容 if(this.next!=null){ // 還有下一個元素,需要繼續輸出 this.next.print() ; // 下一個節點繼續調用print } } public boolean search(String data){ // 內部搜索的方法 if(data.equals(this.data)){ // 判斷輸入的數據是否和當前節點的數據一致 return true ; }else{ // 向下繼續判斷 if(this.next!=null){ // 下一個節點如果存在,則繼續查找 return this.next.search(data) ; // 返回下一個的查詢結果 }else{ return false ; // 如果所有的節點都查詢完之後,沒有內容相等,則返回false } } } }; private Node root ; // 鏈表中必然存在一個根節點 public void addNode(String data){ // 增加節點 Node newNode = new Node(data) ; // 定義新的節點 if(this.root==null){ // 沒有根節點 this.root = newNode ; // 將第一個節點設置成根節點 }else{ // 不是根節點,放到最後一個節點之後 this.root.add(newNode) ; // 通過Node自動安排此節點放的位置 } } public void printNode(){ // 輸出全部的鏈表內容 if(this.root!=null){ // 如果根元素不為空 this.root.print() ; // 調用Node類中的輸出操作 } } public boolean contains(String name){ // 判斷元素是否存在 return this.root.search(name) ; // 調用Node類中的查找方法 } }; public class LinkDemo02{ public static void main(String args[]){ Link l = new Link() ; l.addNode("A") ; // 增加節點 l.addNode("B") ; // 增加節點 l.addNode("C") ; // 增加節點 l.addNode("D") ; // 增加節點 l.addNode("E") ; // 增加節點 System.out.println(l.conteains("C")); } };
3、刪除節點,改變引用傳遞的地址
class Link{ // 鏈表的完成類 class Node{ // 保存每一個節點,此處為了方便直接定義成內部類 private String data ; // 保存節點的內容 private Node next ; // 保存下一個節點 public Node(String data){ this.data = data ; // 通過構造方法設置節點內容 } public void add(Node newNode){ // 將節點加入到合適的位置 if(this.next==null){ // 如果下一個節點為空,則把新節點設置在next的位置上 this.next = newNode ; }else{ // 如果不為空,則需要向下繼續找next this.next.add(newNode) ; } } public void print(){ System.out.print(this.data + "\t") ; // 輸出節點內容 if(this.next!=null){ // 還有下一個元素,需要繼續輸出 this.next.print() ; // 下一個節點繼續調用print } } public boolean search(String data){ // 內部搜索的方法 if(data.equals(this.data)){ // 判斷輸入的數據是否和當前節點的數據一致 return true ; }else{ // 向下繼續判斷 if(this.next!=null){ // 下一個節點如果存在,則繼續查找 return this.next.search(data) ; // 返回下一個的查詢結果 }else{ return false ; // 如果所有的節點都查詢完之後,沒有內容相等,則返回false } } } public void delete(Node previous,String data){ if(data.equals(this.data)){ // 找到了匹配的節點 previous.next = this.next ; // 空出當前的節點 }else{ if(this.next!=null){ // 還是存在下一個節點 this.next.delete(this,data) ; // 繼續查找 } } } }; private Node root ; // 鏈表中必然存在一個根節點 public void addNode(String data){ // 增加節點 Node newNode = new Node(data) ; // 定義新的節點 if(this.root==null){ // 沒有根節點 this.root = newNode ; // 將第一個節點設置成根節點 }else{ // 不是根節點,放到最後一個節點之後 this.root.add(newNode) ; // 通過Node自動安排此節點放的位置 } } public void printNode(){ // 輸出全部的鏈表內容 if(this.root!=null){ // 如果根元素不為空 this.root.print() ; // 調用Node類中的輸出操作 } } public boolean contains(String name){ // 判斷元素是否存在 return this.root.search(name) ; // 調用Node類中的查找方法 } 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) ; // 把下一個節點的前節點和數據一起傳入進去 } } } }; public class LinkDemo02{ public static void main(String args[]){ Link l = new Link() ; l.addNode("A") ; // 增加節點 l.addNode("B") ; // 增加節點 l.addNode("C") ; // 增加節點 l.addNode("D") ; // 增加節點 l.addNode("E") ; // 增加節點 System.out.println("======= 刪除之前 ========") ; l.printNode() ; // System.out.println(l.contains("X")) ; l.deleteNode("C") ; // 刪除節點 l.deleteNode("D") ; // 刪除節點 l.deleteNode("A") ; // 刪除節點 System.out.println("\n====== 刪除之後 =========") ; l.printNode() ; System.out.println("\n查詢節點:" + l.contains("B")) ; } };
最後更新:2017-04-03 15:21:46