欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

任意参数的单链表实现 (Java8)

程序员文章站 2022-04-16 23:45:16
文章目录1 实现功能2 代码1 实现功能  1)add():链表末尾添加元素;  2)pop():移除链表尾部元素;  3)insert():指定索引处添加元素;  4)delete():指定索引处删除元素;  5)getSize():获取链表当前长度;  6)display():展示链表当前元素。...

文章目录

1 实现功能

  1)add():链表末尾添加元素;
  2)pop():移除链表尾部元素;
  3)insert():指定索引处添加元素;
  4)delete():指定索引处删除元素;
  5)getSize():获取链表当前长度;
  6)display():展示链表当前元素。

2 代码

package DataStructure;

/**
 * @author: Inki
 * @email: inki.yinji@qq.com
 * @create: 2020 1024
 * @last_modify: 2020 1025
 */

public class MySingleLinkedList <AnyType> {

    /**
     * Only used to store the head node.
     */
    private SingleNode<AnyType> head = new SingleNode(new Object());

    /**
     * The single linked list current size.
     */
    private int size = 0;

    /**
     * Add element to the end of the list.
     * @param:
     *      paraVal: The given value.
     */
    public void add(AnyType paraVal) {
        insert(size, paraVal);
    }//Of add

    /**
     * Pop the last element.
     * @return:
     *      The popped value.
     */
    public AnyType pop(){
        return delete(size - 1);
    }//Of pop

    /**
     * Insert element at specified index.
     * @param:
     *      paraIdx: The given index.
     *      paraVal: The given value.
     */
    public void insert(int paraIdx, AnyType paraVal) {

        if (paraIdx > size) {
            throw new IndexOutOfBoundsException("The index error.");
        }//Of if

        SingleNode <AnyType> tempNode = head;
        int i = 0;
        while (i++ < paraIdx) {
            tempNode = tempNode.next;
        }//Of while

        SingleNode<AnyType> paraNode = new SingleNode <>(paraVal);
        paraNode.next = tempNode.next;
        tempNode.next = paraNode;
        size++;
    }//of add

    /**
     * Delete the element at specified index.
     * @param:
     *      paraIdx: The given index of element to delete.
     * @return:
     *      The deleted value.
     */
    public AnyType delete(int paraIdx) {
        if (size == 0) {
            throw new RuntimeException("The single linked list is empty.");
        }//Of if

        if (size <= paraIdx) {
            throw new IndexOutOfBoundsException("The index error.");
        }//Of if

        SingleNode <AnyType> retNode = head;
        int i = 0;
        while (i++ < paraIdx) {
            retNode = retNode.next;
        }//Of while

        retNode.next = retNode.next.next;

        size--;
        return retNode.val;
    }//Of delete

    /**
     * Get the current size of the single linked list.
     * @return:
     *      The current size of the single linked list.
     */
    public int getSize() {
        return size;
    }//Of getSize

    /**
     * Display the single linked list.
     */
    public void display() {
    	if (size == 0) {
    		throw new RuntimeException("The single linked list is empty.");
    	}//Of if
    	
        System.out.print("The single linked list is:\n[");
        SingleNode <AnyType> tempNode = head;
        int i = 0;
        while (i++ < size - 1) {
            tempNode = tempNode.next;
            System.out.printf("%s, ", tempNode.val);
        }//Of while
        System.out.printf("%s]\n", tempNode.next.val);
    }//Of display

    /**
     * The main function.
     */
    public static void main(String[] args) {
        MySingleLinkedList <Character> test = new MySingleLinkedList<>();
        test.add('a');
        test.add('b');
        test.insert(0, 'c');
        test.add('d');
        test.insert(0, '5');
        test.delete(4);
        test.pop();
        test.add('+');
        test.display();
        System.out.println(test.getSize());
    }//Of main

}//Of class MySingleLinkedList

class SingleNode <AnyType>{

    /**
     * The value.
     */
    AnyType val;

    /**
     * The next node.
     */
    SingleNode<AnyType> next;

    /**
     * The first constructor.
     * @param
     *      paraVal: The given value.
     */
    SingleNode (AnyType paraVal) {
        val = paraVal;
    }//The first constructor

}//Of class SingleNode

本文地址:https://blog.csdn.net/weixin_44575152/article/details/109279587