zoukankan      html  css  js  c++  java
  • Java单链表简单实现* @version 1.0

    package com.list;
    
    /**
     * 数据结构与算法Java表示
     * @version 1.0
     * @author 小明
     *
     */
    public class MyLinkedList {
        private Node head;// 头结点
        private int size;// 长度
    
        public MyLinkedList() {
            head = null;// 初始化头节点为空
            size = 0;// 初始化长度为0
        }
    
        // 重写toString方法
        @Override
        public String toString() {
            String str = "";
            Node temp = head;
            for (; temp != null;) {
                str += temp.getElement() + " ";
                temp = temp.getNext();// 后移之末尾
            }
            str = "[ " + str + "]";
            return str;
        }
    
        /*
         * add方法默认将结点加入到单链表的末尾
         */
        public void add(Node node) {
            if (head == null) {// 表明此时表为空,不存在头结点
                head = node;// 创造头结点
                size++;// 长度加一
            } else {// 头结点存在
                Node temp = head;// 将head赋值给临时变量
                while (temp.getNext() != null) {
                    temp = temp.getNext();// 后移之末尾
                }
                temp.setNext(node);// 加入节点
                size++;// 长度加一
            }
        }
    
        /*
         * 插入函数
         */
        public void add(int index, Node node) throws IndexException {
            Node temp = head;// 将head赋值给临时变量
            if (size == 0) {// 当表为空时调用add加入至表头
                add(node);
                return;
            }
            if (index <= 0 || index > size + 1) {// 索引位置不正确
                throw new IndexException("索引位置不正确!");
            } else {
                if (index == 1) {// 插入位置为第一个是处理
                    node.setNext(head);// 将原来的头节点设置为插入节点的后继
                    head = node;// 头节点更改
                    size++;// 长度增加
                } else {
                    if (index == size + 1) {// 此时默认插入表尾
                        add(node);
                    } else {// 插入既不是表头也不是表尾时
                        for (int i = 1; i < index - 1; i++) {
                            head = head.getNext();// 后移至插入位置前一位
                        }
                        node.setNext(temp.getNext());// 将temp的后继赋值给插入节点
                        temp.setNext(node);// 将temp的后继改为插入节点
                        size++;// 长度增加
                    }
                }
            }
    
        }
    
        /*
         * 删除函数
         */
        public void remove(int index) throws IndexException {
            Node temp = head;// head赋值给temp
            if (index <= 0 || index > size) {// 索引位置不正确
                throw new IndexException("索引异常");
            } else {// 索引正确
                if (index == 1) {// 删除第一个元素
                    head = head.getNext();
                    size--;//长度减一
                } else {
                    if (index == size) {// 索引正确删除最后一个元素
                        for (; temp.getNext().getNext() != null;) {// 移至倒数第二个元素
                            temp = temp.getNext();
                        }
                        temp.setNext(null);// 删除最后一个元素
                        size--;//长度减一
                    }else {//删除元素不在表头或表尾
                        for(int i=1;i<index-1;i++) {//后移至删除节点的前一个节点
                            temp=temp.getNext();
                        }
                        temp.setNext(temp.getNext().getNext());//删除
                        size--;//长度减一
                    }
                }
            }
        }
    
        public static void main(String[] args) throws IndexException {
            MyLinkedList list = new MyLinkedList();
            list.add(1, new Node<>("asdas"));
            list.add(1, new Node<>("202"));
            list.add(new Node<>(85));
            System.out.println(list);
            list.remove(3);
            System.out.println(list);
            list.add(2,new Node<>(2154));
            System.out.println(list);
        }
    }
    
    /*
     * 结点
     */
    class Node<T> {
        private T element;// 值域
        private Node next;// 指针域
        // 节点初始化只可以设置值域
    
        public Node(T element) {
            this.element = element;
            next = null;
        }
    
        // 获取值域
        public T getElement() {
            return element;
        }
    
        // 获取指针域
        public Node getNext() {
            return next;
        }
    
        public void setNext(Node node) {
            next = node;
        }
    }
    
    /*
     * 索引异常类
     */
    class IndexException extends Exception {
        public IndexException() {
    
        }
    
        public IndexException(String s) {
            super(s);
        }
    }
  • 相关阅读:
    IOS sqlite数据库增删改查
    宏定义偷懒型set,get
    创业白手起家也须要条件——北漂18年(14)
    Python模拟登录wap版百度贴吧+自己主动回贴
    纯CSS制作冒泡提示框
    tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——移植u-boot.bin(打印串口控制台)
    ZOJ 3587 扩展KMP
    用选择法对10个整数按从小到大排序(数组)
    设计一个算法,推断一个二叉树是否为全然二叉树
    Hibernate学习笔记(八) — 懒载入与抓取策略
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9285621.html
Copyright © 2011-2022 走看看