簡體   English   中英

Java LinkedList實現插入方法第0次索引插入處理

[英]Java LinkedList implementation insert method 0th index insertion handling

我已經實現了如下 java 實現了一個鏈表

    public class LinkedListFromScratch {
    private Node head;
    private static int size;

    public LinkedListFromScratch() {
        this.head = null;
        this.size = 0;
    }

    public boolean isEmpty() {
        return head == null;
    }

    public static int getSize() {return size;}
    

    void addToTail(int data) {
    Node newNode = new Node(data);
    //if list is empty, make new node the head.
    if (isEmpty()) {
        this.head = newNode;
        size++;
        return;
    }

    Node itterHead = head;
    while (itterHead.next != null) {
        itterHead = itterHead.next;
    }

    itterHead.next = newNode;
    size++;

}
  

    void addAtIndex(int index, int data) {

        if(index < 0 || index > this.size )
            throw new IllegalArgumentException("Index you entered is out of bounds");

        Node newNode = new Node (data);

        if(isEmpty()) {
            this.head = newNode;
            size++;
            return;
        }


      //locate the obj at index and one before it
      //newnode.next = obj
      //prevnode.next = newnode

      Node current = this.head;
      Node previous = null;
        for ( int i = 0; i < index; i++){
            previous = current;
            current = current.next;
        }


        previous.next = newNode;
        newNode.next = current;
        size++;
    }

    void printList() {
        if (isEmpty())
            System.out.print("[]");

        Node itterHead = this.head;
        System.out.print("[ ");
        while (itterHead != null) {
            System.out.print(itterHead.d + " ");
            itterHead = itterHead.next;
        }
        System.out.print("]");
        System.out.println();

    }

    class Node {
        int d;
        Node next;

        Node(int d) {
            this.d = d;
            this.next = null;
        }
    }
}

這里的問題在於 addAtIndex (int index, int data) 方法。 當我嘗試在索引零處插入一個值時,它會引發 null 指針異常。 這是有道理的,因為 for 循環永遠不會被執行,並且在 index = 0 場景中,“previous”將始終是 null。 對於索引> 0,插入工作正常。處理這種情況的最佳方法是什么?

你需要檢查索引是否為零,這意味着你有新的頭到列表

在 for 循環之前添加此代碼

if (index == 0){
    newNode.next = head;
    head = newNode;
    size++;
    return;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM