微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java LinkedList 实现插入方法第0个索引插入处理

如何解决Java LinkedList 实现插入方法第0个索引插入处理

我已经实现了以下链表的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) 方法。当我尝试在索引零处插入一个值时,它会引发空指针异常。这是有道理的,因为 for 循环永远不会被执行,并且“prevIoUs”在 index = 0 场景中将始终为空。插入适用于索引 > 0。处理这种情况的最佳方法是什么?

解决方法

您需要检查索引是否为零,这意味着您有新的列表头

在for循环之前添加这段代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。