链表(迁自博客园)

链表 Node:节点 数据&next(指向当前节点的下一节点) 数据&next&prev(双向链表)
First:
Last:
Size;节点数
单向链表和双向链表

例.编写双向链表
public class MyLinked{
        
        private Node first;//第一个节点
        private Node last;//第二个节点
        private int size;//节点数

        private void addLast(Object ele){
            Node node  =new Node(ele);

        if(size==0){//第一次添加
          this.first = node;
          this.last = node;
        }
        else{
           //将新增节点作为之前最后一个节点的下一个节点
           this.last.next = node;
           //将新增节点的上一个节点指向之前最后一个节点
           node.prev = this.last;
           //将最后一个节点指向新增节点
           this.last = node;
        }

        size++;
        }

        private void addFirst(Object ele){
        
        Node node  =new Node(ele);

        if(size==0){//第一次添加
          this.first = node;
          this.last = node;
        }
        else{
           //新增节点的下一个节点记录成之前的第一个节点
            node.next = this.first;
           //把之前第一个节点的上一个记录成新增节点
            this.first.prev = node;
           //将链表中第一个节点记录成新增节点
           this.first = node;
        }
        size++;
        }
        
    
        private void remove(Object ele){
        //判断要删除的数据是否在节点中存在
        Node node = this.first;
        for(int i = 0;i<size;i++){
           
           if(!node.ele.equals(ele)){
            
            if(node.next==null){
                System.out.println("不存在");
                return;
            }
            node = node.next;
           }
        }

        if(node == this.first){
        
            this.first = node.next;
            this.first.perv = null;
        }else if(node = this.last){
        
            this.last = node.perv;
            this.last.next = null;
        }else{
        
            node.perv.next = node.next;
            node.last.perv = node.perv;
        }

        size--;
        }

        private boolean search(Object ele){
        
        Node node = this.first;
        for(int i = 0;i<size;i++){
           
           if(!node.ele.equals(ele)){
            
            if(node.next==null){
                System.out.println("不存在");
                return flase;;
            }
            node = node.next;
           }
        }

        return true;
        }

        privatr String toString(){
        
        if(size == 0){
            return "[]";
        }

        StringBuffer stringBuffer = new StringBuffer();
        Node node = this.first;
        
        stringBuffer.append("[");
        for(int i = 0;i<size;i++){
        
            stringBUfffer.append(node.ele);

            if(i!=size-1){
            
            stringBuffer.append(",");
            }
            
            node = node.next
        }
        stringBuffer.append("]");

        return stringBuffer.toString();
        }

        class Node{
        
        Node next;//记录下一个节点
        Node perv;//记录上一个节点

        Object ele;//数据

        public Node(Object ele){
            this.ele = ele;
        }

        }
    
    }




    public class MyLinkedDemo{
    
        Mylinked myLinked = new MyLinked();

        myLinked.addFirst(100);
        myLinked.addFirst(10);

        myLinked.addLast(1000);

        myLinked.remove(100);

        System.out.println(myLinked.toString());

        System.out.println(myLinked.search(10));
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值