初學者用java實現基礎單鏈表

初學者用java實現基礎的單鏈表

java實現單鏈表

初學者應該實現的基本功能:

//用java實現單鏈表
@SuppressWarnings("all") // 禁止警告
public class LinkedList {

    private class Node{
        public int value;
        public Node next;

        public Node(int value) {
            this.value = value;
        }
    } //節點內部類
    private int size;  //鏈表長度
    private Node head,last;//頭節點,尾結點

    public LinkedList(){
        head = null;
        size = 0;
    }
    //1.插入節點
    public void insert(int index,int value){
        if(index<0||index>size){
            System.out.println("位置不合理!");
        }
        Node node = new Node(value);
        if(index == 0){
            node.next = head;
            head = node;size++;
        }else if(index == size){
            last.next = node;
            last = node;size++;
        }else if(index > 0 && index < size){
            Node pre = head;
            for(int i=0;i<index-1;i++){
                pre = pre.next;
            }
            Node temp = pre.next;
            pre.next = node;
            node.next = temp;size++;
        }
    }
    //2.添加節點
    public void add(int value){
        Node node = new Node(value);

        if(head == null){
            head = node;last = node;size++;

        }else{
            last.next = node;
            last = node;
            size++;
        }
    }
    //3.返回節點
    public Node getNode(int index){
       if(index<0||index>size){
           System.out.println("位置不合理");
       }else{
           Node node= head;
           for(int i=0;i<index;i++){
               node = node.next;
           }
           return node;
       }
       return null;
    }
    //4.得到節點值
    public int get(int index){
        if(index<0||index>=size){
            System.out.println("位置不合理");
        }else{
            Node pre = head;
            for(int i=0;i<index;i++){
                pre = pre.next;
            }
            return pre.value;
        }
        return -1;
    }
    //5.刪除節點
    public int delete(int index){
        int value = -1;
        if(index<0||index>size){
            System.out.println("位置不合理");return -1;
        }
        if(size == 0){
            System.out.println("沒有元素被刪除");return -1;
        }
        if(index == 0){
            value = this.getheader();
            head = head.next;size--;
        }else if(index == size-1) {
            value = this.getlaster();
            this.getNode(size-2).next = null;
            size--;
        }else{
            value = this.get(index);
            this.getNode(index-1).next = this.getNode(index+1);
            size--;
        }
        return value;
    }
    //6.判斷是否爲空
    public boolean isEmpty(){return size==0;}
    //7.返回節點數
    public int getSize(){return size;}
    //8.返回頭節點值
    public int getheader(){return head.value;}
    //9.返回尾結點值
    public int getlaster(){return last.value;}
    //10.對單鏈表從小到大排序(選擇排序)
    public void  sort(){
        for(int i=0;i<size;i++){
            int min = i;
            for(int j=i;j<size;j++){
                if(get(min)>get(j)){
                    min = j;
                }
            }
            int temp = getNode(min).value;
            getNode(min).value = getNode(i).value;
            getNode(i).value = temp;
        }

    }
    //11.遍歷單鏈表
    public void print(){
        if(isEmpty()){
            System.out.println("單鏈表爲空表");
        }else{
            Node pre = head;
            for(int i=0;i<size;i++){
                System.out.print(pre.value+" ");
                pre = pre.next;
            }
            System.out.println();
        }
    }
    //主測試類
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add(3);
        list.add(1);
        list.add(6);
        list.insert(0,10);
        list.insert(3,2);
        System.out.println("鏈表中索引爲3的值:"+list.get(3));
        System.out.println("鏈表的長度:"+list.getSize());
        System.out.println("鏈表頭結點的值:"+list.getheader());
        System.out.println("鏈表尾結點的值:"+list.getlaster());
        list.print();
        list.sort();//排序
        list.print();
        System.out.println("鏈表頭結點的值:"+list.getheader());
        System.out.println("鏈表尾結點的值:"+list.getlaster());
    }
}

實現結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章