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

文章目录

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
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页