JAVA 单向链表

package com.test;

public class SingleLinkedList<T> {

    /**
     * 链表长度
     */
    public int size;
    /**
     * 头结点
     */
    public Node<T> head = new Node<T>();
    /**
     * 尾结点
     */
    public Node<T> rear = head;

    /**
     * 结点类
     * @param <T>
     */
    private class Node<T>{
        /**
         * 结点数据
         */
        T data;
        /**
         * 下个节点
         */
        Node<T> next;
        public Node(T data){
            this.data=data;
            this.next = null;
        }
        public Node(){}

        @Override
        public String toString() {
            return "Node{" +
                    "data=" + data +
                    ", next=" + next +
                    '}';
        }
    }

    /**
     *尾添加
     * @param data
     */
    public void  addRear(T data){
        Node newNode = new Node(data);
        this.rear.next = newNode;
        this.rear = newNode;
        size ++;

    }

    /**
     * 头添加
     * @param data
     */
    public  void addHead(T data){

        Node newNode = new Node(data);
        newNode.next = this.head.next;
        this.head.next = newNode;
        if(size==0){
            this.rear = newNode;
        }
        size ++;

    }

    /**
     * 插入
     * @param data
     * @param index
     */
    public void insert(T data, int index){
        if(index>this.size){
            throw  new RuntimeException("OUT OF INDEX");
        }

        Node node = this.head;
        for(int i=0;i<index;i++){
            node = node.next ;
        }
        Node newData = new Node(data);
        newData.next = node.next;
        node.next = newData;
        if(index==0){
            this.head = newData;
        }
        if(index==size){
            this.rear = newData;
        }
        this.size++;
    }

    /**
     * 删除
     * @param index
     */
    public void delete(int index){
        if(index>=this.size||index<0){
            throw  new RuntimeException("OUT OF INDEX");
        }
        Node node = this.head;
        for(int i=0;i<index;i++){
            node = node.next ;
        }
        if(null!=node.next){
            node.next=node.next.next;
        }else {
            node.next = null;
        }
        size--;
        if(index==size){
            this.rear = node;
        }

    }

    /**
     * 修改
     * @param data
     * @param index
     */
    public void update(T data,int index){
        if(index>=this.size||index<0){
            throw  new RuntimeException("OUT OF INDEX");
        }
        Node newNode = new Node(data);

        Node node = this.head;
        for(int i=0;i<index;i++){
            node = node.next ;
        }
        if(null!=node.next){
            newNode.next = node.next.next;
        }
        node.next=newNode;

        if(index+1==size){
            this.rear = newNode;
        }
    }

    /**
     * 遍历
     */
    public void showList() {
        Node node = head.next;
        for (int i = 0; i < size; i++) {
            System.out.println(node.data);
            node = node.next;
        }
    }


    /**
     * 索引
     * @param index
     * @return
     */
    public T getData(int index){
        if(index>=this.size||index<0){
            throw  new RuntimeException("OUT OF INDEX");
        }

        Node<T> node = this.head;
        for(int i=0;i<index+1;i++){
            node = node.next ;
        }
        return (T) node;
    }


    /**
     * 翻转
     */
    public void reverse(){
        SingleLinkedList tmpList = new SingleLinkedList();
        Node node = head.next;
        while (node!=null){
            tmpList.addHead(node.data);
            node = node.next;
        }
        this.head = tmpList.head;

    }

    public static void main(String[] args) {
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.addHead("head1");
        singleLinkedList.addHead("head2");
        singleLinkedList.addRear("rear1");
        singleLinkedList.addRear("rear2");
        singleLinkedList.insert("insert",4);
        singleLinkedList.delete(0);
        singleLinkedList.update("update",0);
        System.out.println(singleLinkedList);
        singleLinkedList.showList();
        System.out.println(singleLinkedList.getData(3));

        singleLinkedList.reverse();
        singleLinkedList.showList();


    }

    @Override
    public String toString() {
        return "SingleLinkedList{" +
                "size=" + size +
                ", head=" + head +
                ", rear=" + rear +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itmaguoyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值