如何解决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 举报,一经查实,本站将立刻删除。