美文网首页
Java单链表

Java单链表

作者: 我的阿福 | 来源:发表于2020-08-29 15:06 被阅读0次
/**
 * 单链表
 * 
 * @author AfuAnthony
 *
 * @param <DATA>数据域类型泛型
 * 
 * @apiNote 如果有元素,则index从0开始。
 * 初始化时,size为0,只包含一个head节点。
 * 
 */
public class AfuLinkList<DATA> {
    private Node mHead;
    private int mSize;

    public AfuLinkList() {
        mHead = new Node();
        mSize = 0;
    }


    public boolean add(DATA data) {
        Node newNode = new Node(data);
        Node lastNode = getNode(getSize()-1);
        if(lastNode!=null) {
            lastNode.next=newNode;
            mSize++;
            return true;
        }
        return false;
    }

    public boolean  delete() {
        if(mSize==0) {
            return false;
        }
        Node lastSecondNode;
        lastSecondNode = getNode(getSize()-1);
        if(lastSecondNode!=null) {
            lastSecondNode.next=null;
            mSize--;
            return true;
        }
        return false;
        
    }
    
    public boolean insert(int index, DATA data) {
        Node newNode = new Node(data);
        if(index>=0&&index<getSize()) {
            Node insertPreNode = getNode(index-1);
            if(insertPreNode!=null) {
            Node insertPositionNode =   insertPreNode.next;
                if(insertPositionNode!=null) {
                    insertPreNode.next=newNode;
                    newNode.next=insertPositionNode;
                    mSize++;
                    return true;
                }
            }
        }
        return false;
    }

    public boolean modify(int index, DATA data) {
        if(index>=0&&index<getSize()) {
            Node node = getNode(index);
            if(node!=null) {
                node.setData(data);
                return true;
            }
        }
        return false;
    }

    public Node getNode(int index) {
        if(index==-1) {
            return mHead;
        }else if(index>-1&&index<mSize) {
            Node tmpNode = mHead;
            for(int i=0;i<=index;i++) {
                tmpNode = tmpNode.next;
            }
            return tmpNode;
        }
        return null;
    }

    public int getSize() {
        return mSize;
    }
    
    
    public boolean isEmpty(){
        return mSize==0;
    }
    
    @Override
    public String toString() {
        int listSize = mSize;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("size=")
        .append(listSize)
        .append("\r\n");
        if(!isEmpty()) {
            Node tmpNode = mHead;
            for(int index=0;index<listSize;index++) {
                tmpNode = tmpNode.next;
                stringBuilder.append('[')
                .append(index)
                .append(']')
                .append("=")
                .append(tmpNode.getData())
                .append("\r\n");
            }
        }
        return stringBuilder.toString();
    }

    public void print() {
        System.out.println(toString());
    }
    
    public class Node {
        private DATA data;
        private Node next;

        public Node() {
        }

        public Node(DATA data, AfuLinkList<DATA>.Node next) {
            super();
            this.data = data;
            this.next = next;
        }

        public Node(DATA data) {
            super();
            this.data = data;
        }

        public Node(AfuLinkList<DATA>.Node next) {
            super();
            this.next = next;
        }

        public DATA getData() {
            return data;
        }

        public void setData(DATA data) {
            this.data = data;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }

    }

    /**
     * test
     * @param args
     */
    public static void main(String[] args) {
        AfuLinkList<Integer> linkList = new AfuLinkList<>();
        System.out.println(linkList.add(3));
        System.out.println(linkList.add(2));
        linkList.add(1);
        linkList.insert(2, 0);
        linkList.print();
        linkList.delete();
        linkList.print();
        linkList.modify(2, 1);
        linkList.print();
    }

}

相关文章

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • java单链表排序

    在线手写 java单链表排序 单链表每个节点为: 如果一个单链表为2->1->3->5->4,经过排序后链表结构为...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • Java单链表

  • Message.obtain()中的单链表栈缓存

    Message.obtain()中的单链表栈缓存 Android中的Message.java用单链表实现了一个si...

  • 数据结构-线性表-单链表-01

    线性数据结构- 单链表 java 定义单链表 添加到队尾(tail) 向链表中添加数据,添加到队头 节点插入到指定得位置

  • 单链表 C++

    单链表 C++ 题目 1、创建单链表2、初始化单链表3、释放单链表4、获取单链表中元素的数量5、输出单链表中的所有...

  • 线性表:顺序表和链表

    顺序表(数组)优缺点 链表优点 单链表使用 单链表结构 单链表初始化 单链表初始化 单链表建立: 头插法 尾插法 ...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • Java实现单链表

    链表的结构相信大家都已经理解,这次简单的实现一个单链表,以及其中的操作 第一步 定义节点类 其中定义泛型约束 以及...

网友评论

      本文标题:Java单链表

      本文链接:https://www.haomeiwen.com/subject/otywjktx.html