目标:
- 了解引用传递的深入应用
- 了解链表的基本概念
- 理解内部类的作用
- 深入链表的操作
1.具体内容
1.1概念:
- 链表在数据结构中是一种经常见到的形式,在java中可以通过引用传递的方式实现。
- 链表就是像火车头一样,有一个根节点链接下一个节点。上一个节点指向下一个结点对象的引用。
- 要想实现链表,则需要一个节点类,此类中必须有一个属性可以保存下一个结点的引用地址。
1.2节点设计:
- 每一节车厢就相当于一个节点,此节点不经要保存自己的内容,还要保存下一节点的引用。
1.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){
this.next = newNode ;
}else{
this.next.add(newNode) ;
}
}
public void print(){
System.out.print(this.data + "\t") ;
if(this.next!=null){
this.next.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 ;
}
}
}
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) ;
}
}
public void printNode(){
if(this.root!=null){
this.root.print() ;
}
}
public boolean contains(String name){
return this.root.search(name) ;
}
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() ;
l.deleteNode("C") ;
l.deleteNode("D") ;
l.deleteNode("A") ;
System.out.println("\n====== 删除之后 =========") ;
l.printNode() ;
System.out.println("\n查询节点:" + l.contains("B")) ;
}
};