java首先单向链表,实现链表的末尾增加,删除节点,查询节点,打印链表。
简短精悍的设计,记录一下,多多学习这样的设计思路。
class Link{
class Node{
private String data;//值
private Node next;//下一个节点的引用
public Node(String data){
this.data=data;
}
private void print(){
System.out.println(this.data+"\t");
if(this.next!=null){
this.next.print();
}
}
private void add(Node newNode){
if(this.next==null){
this.next=newNode;
}else{
this.next.add(newNode);
}
}
private boolean search(String data){
if(data.equals(this.data)){
return true;
}else{//递归查找
if(this.next!=null){
return this.next.search(data);
}else{
return false;
}
}
}
private 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 printNode(){
if(this.root!=null){
this.root.print();
}
}
//末尾增加
public void addNode(Node newNode){
if(this.root==null){
this.root=newNode;
}else{
this.root.add(newNode);
}
}
//查询节点
public boolean searchNode(String data){//判断元素是否存在
return this.root.search(data);
}
//删除节点
public void deleteNode(String data){
if(this.searchNode(data)){
if(this.root.data.equals(data)){//删除的是根节点
this.root=this.root.next;
}else{
this.root.next.delete(root,data);//把当前节点的前一个节点和要删除的内容传递进去
}
}
}
}
public class LinkDemo{
public static void main(String args[]){
Link l=new Link();
l.addNode("A");
l.addNode("B");
l.addNode("C");
l.addNode("D");
l.printNode();
System.out.println("查询节点C:"+l.searchNode("C"));
System.out.println("查询节点X:"+l.searchNode("X"));
l.deleteNode("C");
l.printNode();
}
}