使用Java使用数据结构中的单链表

package linkNode;

/**
 * 链表类
 * @author Administrator
 *
 */
class Link{
 /**
  * 节点
  * @author Administrator
  *
  */
 class Node {
  private String data;   //节点数据
  private Node next;   //下一个节点
  public Node(String data){
   this.data= data;
  }
  
  /**
   * 增加新节点,在链表的末尾增加<即每次在链表的末尾增加新的节点>
   * @param newNode
   */
  public void addNode(Node newNode) {
   if(this.next == null){
                //将新节点设这为该节点的下一个节点
    this.next = newNode;
   } else {
    //如果该节点的下一个节点不为空,则递归调用该节点的addNode(Node newNode)方法
    this.next.addNode(newNode);
   }
  }

  /**
   * 递归打印节点内容
   */
  public void printNode() {
   System.out.print(this.data + "  ");
   if(this.next!=null){
    //如果该节点的下一个节点不为空,则递归调用下一个节点的printNode()方法
    this.next.printNode();
   }
  }

  /**
   * 查找是否有节点内容与data相等,即查找链表中是否有某节点
   * @param root
   * @param data2
   * @return
   */
  public boolean search(String data) {
            if(this.next != null){
             //如果下一个节点不为空,则查找下一个节点
             if(this.next.data.equals(data)){
              return true;
             } else {
              //递归查找
              return this.next.search(data);
             }
            }
            else {
             //如果下一个节点为空,则返回false
       return false;
            }
  }

  /**
   * 删除内容为data的节点
   * @param previous
   * @param data
   */
  public void deleteNode(Node previous, String data) {
    if(this.data.equals(data)){
     previous.next = this.next;
    }
    if(this.next != null){
     this.next.deleteNode(this, data);
    }
  }
 }

 private Node root;   //根节点
 
 /**
  * 向链表中增加节点
  * @param data   节点内容
  */
 public void add(String data){
  Node newNode = new Node(data);
  if(this.root == null){
   this.root = newNode;
  } else {
   this.root.addNode(newNode);    //增加新节点,并调用节点类的addNode()方法
  }
 }
 
 /**
  *  打印链表内容
  */
 public void print(){
  if(this.root != null){
   this.root.printNode();    //调用Node类中的printNode()方法
  }
 }
 
 /**
  * 查找链表中是否存在节点内容
  * @param data
  * @return  存在返回true,不存在返回false
  */
 public boolean contains(String data){
  //从跟节点开始往下查
  if(this.root.data.equals(data)){
   return true;
  } else {
   return this.root.search(data);
  }
 }
 
 /**
  * 根据节点内容删除节点
  * @param data
  */
 public void delete(String data){
  if(this.root.data.equals(data)){
   this.root = this.root.next;
  } else {
   if(root.next != null){
    this.root.next.deleteNode(root,data);
   }
  }
 }
 
 
}

/**
 * 单链表的实现<增加,查找,删除>
 * @author Administrator
 *
 */
public class LinkDemo2 {
    public static void main(String[] args) {
  Link l = new Link();
  l.add("A");    //向链表中增加节点
  l.add("B");    //向链表中增加节点
  l.add("C");    //向链表中增加节点
  l.add("D");    //向链表中增加节点
  l.add("E");    //向链表中增加节点
  l.add("F");    //向链表中增加节点
  l.add("B");    //向链表中增加节点
  l.add("G");    //向链表中增加节点
  l.add("H");    //向链表中增加节点
  l.add("I");    //向链表中增加节点
  l.add("J");    //向链表中增加节点
  l.add("K");    //向链表中增加节点
  
  l.print();
 
  System.out.println("\n链表中是否含有Z\t" + l.contains("Z"));
 
        l.delete("B");
        l.delete("F");
        l.delete("O");
        System.out.println("删除B,O,F后链表中的内容");
        l.print();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值