Java简单链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
搞清楚什么是链表之后,就可以用Java写一个简单的链表了。我用的是内部类来定义节点,这样的好处是,内部类可以访问外部类的成员和方法。话不多说,贴上代码。

package link;
/**
 * @author  曾炜龙  E-mail: 1501122784@qq.com
 * @date 创建时间:2017年7月27日 下午5:18:25 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
class Link{
    class Node{
        private String data;
        private Node next;
        public Node(String data){
             this.data = data;
        }
        //增加操作
        public void add(Node node){
            if(this.next==null){
                this.next=node;
            }else{
                this.next.add(node);
            }

        }
        //打印
        public void print(){
            System.out.print(this.data+"\t");
            if(this.next!=null){
                this.next.print();
            }
        }
        public boolean seach(String data){
            if(data.equals(this.data)){
                return true;
            }else{
                if(this.next!=null){
                    return this.next.seach(data);
                }else{
                    return false;
                }
            }
        }

        public void delete(Node per,String data){
            if(data.equals(this.data)){
                per.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 data){
        return this.root.seach(data);
    }
    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 LinkDemo2 {
     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.addNode("F");
          l.printNode();
          System.out.println();
          System.out.println("----------查询是否存在----------");
          boolean b = l.contains("A");
          System.out.println(b);

          l.deleteNode("A");
          System.out.println("-------删除之后------");
          l.printNode();
     }
}

主要实现的就是基本链表的增删查改方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值