public class SingleLink
{
public static void main(String[] args) {
// TODO Auto-generated method stub
Link link = new Link() ;
link.add(1) ;
link.add(2) ;
link.add(3) ;
link.add(4) ;
link.add(5) ;
link.add(6) ;
link.add(7) ;
System.out.println("链表初始化元素: ") ;
link.printLink() ;
System.out.println("\n搜索元素5结果:
" + link.search(5))
;
System.out.println("搜索元素8结果:
" + link.search(8))
;
link.delete(1) ;
link.delete(4) ;
link.delete(8) ;
System.out.println("删除元素1,4,8之后链表元素:") ;
link.printLink() ;
}
}
class Link{
class Node{ //定义节点类,作为Link类的内部类
private int data ;
//保存节点值
public Node(int data){
this.data = data ;
}
private Node next ;
//存放下一个节点
public void addNode(Node newNode){
if(this.next==null){
this.next = newNode ;
}else{ //交给节点本身处理,因节点本身知道自己的下一个节点是谁
this.next.addNode(newNode) ;
}
}
public void printNode(){
if(this.next!=null){
//从下一个节点开始判断,因为刚开始传进来的是根节点,是已经输出了的
System.out.print(this.next.data + "\t") ;
this.next.printNode() ;
//循环输出
}
}
public boolean searchNode(int data){
if(this.next!=null){
//从下一个节点开始判断,因为刚开始传进来的是根节点,是已经比较过的
if(this.next.data==data){
return true ;
}else{
//继续往下搜索,传入当前节点node.next
return this.next.searchNode(data) ;
}
}else{
return false ;
}
}
public void deleteNode(int data){
if(this.next!=null){
//下一个节点不为空则继续
if(this.next.data==data){
this.next = this.next.next ;//删除节点
return ;
}else{
this.next.deleteNode(data) ;//继续向下寻找
}
}
}
};
private Node root ;
//保存根节点
public void add(int data){
//添加节点
Node newNode = new Node(data) ;
//新建一个节点
if(root==null){
//如果根节点为空,当前节点作为根节点
root = newNode ;
}else{
root.addNode(newNode) ;
//否则由根节点指定继续添加节点
}
}
public void delete(int data){
if(this.search(data)){
//删除之前先判断元素是否存在
if(this.root!=null){
if(this.root.data==data){
//如果是根节点
this.root = this.root.next ;//删除根节点--将下一个节点作为根节点
}else{
//交给节点本身处理,继续下行判断,因节点本身知道自己的下一个节点是谁
this.root.deleteNode(data) ;
}
}
}
}
public boolean search(int data){
if(this.root!=null){
//根节点不为空
if(this.root.data==data){
//与根节点进行比较
return true ;
//相等则找到,返回true
}else{
//不相等则继续往下找
return this.root.searchNode(data) ;
//把待查找的数据传入,交给节点本身来处理
}
}else{
return false ;
}
}
public void printLink(){
//打印链表
if(this.root!=null){
System.out.print(this.root.data + "\t") ;
this.root.printNode() ;
//交给节点类本身来处理
}
}
};
加载中,请稍候......