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