zoukankan      html  css  js  c++  java
  • java 作业题7

    没空敲了 代码是别人的轮子 稍微改了改

    把单链表全实现了

    package Test;
    
    
    public class Linked <T>{
        
        private class Node{
            private T t;
            private Node next;
            public Node(T t,Node next){
                this.t = t;
                this.next = next;
            }
            public Node(T t){
                this(t,null);
            }
        }
        private Node head;            //头结点
        private int size;            //链表元素个数
        //构造函数
        public Linked(){
            this.head = null;
            this.size = 0;
        }
        
        //获取链表元素的个数
        public int getSize(){
            return this.size;
        }
        //判断链表是否为空
        public boolean isEmpty(){
            return this.size == 0;
        }
        //链表头部添加元素
        public void addFirst(T t){
            Node node = new Node(t);    //节点对象
            node.next = this.head;
            this.head = node;
            // this.head = new Node(e,head);等价上述代码
            this.size++;
        }
        //向链表尾部插入元素
        public void addLast(T t){
            this.add(t, this.size);
        }
        //向链表中间插入元素
        public void add(T t,int index){
            if (index <0 || index >size){
                throw new IllegalArgumentException("index is error");
            }
            if (index == 0){
                this.addFirst(t);
                return;
            }
            Node preNode = this.head;
            //找到要插入节点的前一个节点
            for(int i = 0; i < index-1; i++){
                preNode = preNode.next;
            }
            Node node = new Node(t);
            //要插入的节点的下一个节点指向preNode节点的下一个节点
            node.next = preNode.next;
            //preNode的下一个节点指向要插入节点node
            preNode.next = node;
            this.size++;
        }
        //删除链表元素
        public void remove(T t){
            if(head == null){
                System.out.println("无元素可删除");
                return;
            }
            //要删除的元素与头结点的元素相同
            while(head != null && head.t.equals(t)){
                head = head.next;
                this.size--;
            }
            /**
             * 上面已经对头节点判别是否要进行删除
             * 所以要对头结点的下一个结点进行判别
             */
            Node cur = this.head;
            while(cur != null && cur.next != null){
                if(cur.next.t.equals(t)){
                    this.size--;
                    cur.next = cur.next.next;
                }
                else cur = cur.next;
            }
            
        }
        //删除链表第一个元素
        public T removeFirst(){
            if(this.head == null){
                System.out.println("无元素可删除");
                return null;
            }
            Node delNode = this.head;
            this.head = this.head.next;
            delNode.next =null;
            this.size--;
            return delNode.t;
        }
        //删除链表的最后一个元素
        public T removeLast(){
            if(this.head == null){
                System.out.println("无元素可删除");
                return null;
            }
            //只有一个元素
            if(this.getSize() == 1){
                return this.removeFirst();
            }
            Node cur = this.head;    //记录当前结点
            Node pre = this.head;    //记录要删除结点的前一个结点
            while(cur.next != null){
                pre = cur;
                cur = cur.next;
            }
            pre.next = cur.next;
            this.size--;
            return cur.t;
        }
        //链表中是否包含某个元素
        public boolean contains(T t){
            Node cur = this.head;
            while(cur != null){
                if(cur.t.equals(t)){
                    return true;
                }
                else cur = cur.next;
            }
            return false;
        }
        @Override
        public String toString() {
            StringBuffer sb = new StringBuffer();
            Node cur = this.head;
            while(cur != null){
                sb.append(cur.t+"->");
                cur = cur.next;
            }
            sb.append("NULL");
            return sb.toString();
        }
        
        public static void main(String[] args) 
        
        {
            Linked<Integer> linked = new Linked<Integer>();
            for(int i = 0; i < 10; i++){
                linked.addFirst(i);
                System.out.println(linked);
            }
            linked.addLast(33);
            linked.addFirst(33);
            linked.add(33, 5);
            System.out.println(linked);
            linked.remove(33);
            System.out.println(linked);
            System.out.println("删除第一个元素:"+linked.removeFirst());
            System.out.println(linked);
            System.out.println("删除最后一个元素:"+linked.removeLast());
            System.out.println(linked);
        }
    }
  • 相关阅读:
    Android三种菜单的使用方式
    Express无法解析POST请求的JSON参数
    reids数据备份与恢复
    docker获取数据库时间相差8小时
    centos添加新用户
    创建一个新的容器并运行一个命令
    docker启动容器时报错unknown shorthand flag: ‘n‘ in -name
    linux查看cpu详细信息
    ValueError: Shapes (None, 1) and (None, 2) are incompatible
    Python:IOError: image file is truncated 的解决办法
  • 原文地址:https://www.cnblogs.com/ranzhong/p/14162799.html
Copyright © 2011-2022 走看看