• 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);
        }
    }
  • 相关阅读:
    用Hexo搭建博客(一)——在本地搭建一个博客
    Windows 10关闭自动更新
    ArcGIS Engine10.2与VS2012的安装与配置(含下载链接)
    ArcGIS Server 10.6 安装在windows server 2008 r2 环境中遇到的问题及解决方法
    windows server 2012 配置IIS 8.0教程
    VMware安装windows server 2012 r2详细教程(附下载链接)
    动态网页开发基础
    使用jQuery操作DOM
    jQuery中的事件与动画
    Jquery选择器
  • 原文地址:https://www.cnblogs.com/ranzhong/p/14162799.html
Copyright © 2020-2023  润新知