ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

手写链表

2019-10-25 18:03:38  阅读:268  来源: 互联网

标签:myLink node java 链表 MyNode firstNode 手写 public


package Method;

import org.omg.Messaging.SYNC_WITH_TRANSPORT;
import serial.MyBaseBean;

/**
 * Created by joyce on 2019/10/25.
 */
public class MyLink<T> {

    private MyNode<T> firstNode;
    private MyNode<T> lastNode;
    private Integer length = 0;

    public String toString() {
        MyNode<T> node = firstNode;
        if(node == null)
            System.out.println(node);
        while (node != null) {
            System.out.println(node.getT());
            node = node.nextNode;
        }
        return null;
    }

    public T get(int index) {
        if(index >= length)
            throw new RuntimeException();

        MyNode<T> node = firstNode;
        for(int j=0; j<index; ++j) {
            node = node.nextNode;
        }

        return node.getT();
    }

    public static void main(String [] f) {
        MyLink<Integer> myLink = new MyLink<>();
        myLink.add(1);
        myLink.add(2);
        myLink.add(3);
        myLink.add(4);
        myLink.toString();
        // 删尾
        myLink.remove(3);
        myLink.toString();
        // 删中间
        myLink.remove(1);
        myLink.toString();
        // 删头节点
        myLink.remove(0);
        myLink.toString();
        // 删唯一节点
        myLink.remove(0);
        // 没节点
        myLink.toString();
        myLink.remove(0);
    }

    public void add(T t) {
        MyNode<T> node = new MyNode<T>(t);
        if(length == 0) {
            firstNode = lastNode = node;
        } else {
            lastNode.setNextNode(node);
            lastNode = node;
        }
        ++length;
    }

    public void remove(int index) {

        if(index >= length)
            throw new RuntimeException();

        if(length == 1) {
            firstNode = null;
            lastNode = null;
        } else if(index == 0) {
            firstNode = firstNode.nextNode;
        } else if(length - 1 == index) {
            MyNode<T> node = firstNode;
            for(int j=0; j<index -1; ++j) {
                node = node.nextNode;
            }
            lastNode = node;
            node.nextNode = null;
        } else {
            MyNode<T> node = firstNode;
            for(int j=0; j<index -1; ++j) {
                node = node.nextNode;
            }
            node.nextNode = node.nextNode.nextNode;

        }

        --length;
    }



    private static class MyNode<T> {
        private T t;
        private MyNode<T> nextNode;
        public MyNode(T t) {
            this.t = t;
        }

        public T getT() {
            return t;
        }

        public void setT(T t) {
            this.t = t;
        }

        public MyNode<T> getNextNode() {
            return nextNode;
        }

        public void setNextNode(MyNode<T> nextNode) {
            this.nextNode = nextNode;
        }
    }
}

 

输出:

1
2
3
4
1
2
3
1
3
3
null
java.lang.RuntimeException
at Method.MyLink.remove(MyLink.java:75)
at Method.MyLink.main(MyLink.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

标签:myLink,node,java,链表,MyNode,firstNode,手写,public
来源: https://www.cnblogs.com/silyvin/p/11739405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有