遍历链表抛出空指针异常
Traversing through Linked List throws me a Null Pointer exception
在双端 Linked 列表中,我使用了另一个 Link theLink
,它通过复制构造函数复制到复制 firstLink
。但是当我遍历 Linked List 以从后端插入时,它抛出一个空指针异常。
package javaapplication2;
import java.util.Arrays;
public class DoubleEndedLinkList {
Link firstLink;
Link lastLink;
int data;
public boolean isEmpty() {
return firstLink == null;
}
public void insertAbove(int data) {
Link toInsert = new Link(data);
if (isEmpty()) {
firstLink = toInsert;
} else {
// System.out.println("firstLink : " + firstLink.data);
toInsert.next = firstLink;
firstLink = toInsert;
}
}
public void insertBelow(int data) {
Link toInsert = new Link(data);
if(isEmpty()){
lastLink = toInsert;
}else{
Link traversal = new Link(firstLink);
while(traversal!=null){
traversal = traversal.next;
}
System.out.println("LastLink = " + traversal.data ); //Here exception occurs
lastLink = traversal;
lastLink.next = toInsert;
lastLink = toInsert;
}
}
public void display() {
Link theLink = firstLink;
try {
System.out.print(theLink.data + "->");
theLink = theLink.next;
while (theLink != null) {
System.out.print(theLink.data + "->");
theLink = theLink.next;
}
System.out.print("||");
} catch (NullPointerException e) {
System.out.print("->||");
}
}
@Override
public String toString() {
return String.valueOf(data);
}
public static void main(String[] args) {
DoubleEndedLinkList dl = new DoubleEndedLinkList();
dl.insertAbove(5);
dl.insertAbove(10);
dl.insertAbove(15);
dl.display();
dl.insertBelow(99);
System.out.println("FirstLink = " + dl.firstLink.data + " LastLink = " + dl.lastLink.data);
}
}
问题似乎出在方法 insertBelow
上。您有条件继续前进,直到节点 traversal
不为空:
while(traversal!=null){
traversal = traversal.next;
}
当 while 循环结束时 traversal
将指向 null
位置。然后在下一行:
lastLink = traversal;
现在 lastLink
为空,下一行:
lastLink.next = toInsert;
正在尝试访问 null
,因此出现了 NPE 问题。您需要通过更改 while 循环条件来修复代码:
while(traversal.next!=null)
在双端 Linked 列表中,我使用了另一个 Link theLink
,它通过复制构造函数复制到复制 firstLink
。但是当我遍历 Linked List 以从后端插入时,它抛出一个空指针异常。
package javaapplication2;
import java.util.Arrays;
public class DoubleEndedLinkList {
Link firstLink;
Link lastLink;
int data;
public boolean isEmpty() {
return firstLink == null;
}
public void insertAbove(int data) {
Link toInsert = new Link(data);
if (isEmpty()) {
firstLink = toInsert;
} else {
// System.out.println("firstLink : " + firstLink.data);
toInsert.next = firstLink;
firstLink = toInsert;
}
}
public void insertBelow(int data) {
Link toInsert = new Link(data);
if(isEmpty()){
lastLink = toInsert;
}else{
Link traversal = new Link(firstLink);
while(traversal!=null){
traversal = traversal.next;
}
System.out.println("LastLink = " + traversal.data ); //Here exception occurs
lastLink = traversal;
lastLink.next = toInsert;
lastLink = toInsert;
}
}
public void display() {
Link theLink = firstLink;
try {
System.out.print(theLink.data + "->");
theLink = theLink.next;
while (theLink != null) {
System.out.print(theLink.data + "->");
theLink = theLink.next;
}
System.out.print("||");
} catch (NullPointerException e) {
System.out.print("->||");
}
}
@Override
public String toString() {
return String.valueOf(data);
}
public static void main(String[] args) {
DoubleEndedLinkList dl = new DoubleEndedLinkList();
dl.insertAbove(5);
dl.insertAbove(10);
dl.insertAbove(15);
dl.display();
dl.insertBelow(99);
System.out.println("FirstLink = " + dl.firstLink.data + " LastLink = " + dl.lastLink.data);
}
}
问题似乎出在方法 insertBelow
上。您有条件继续前进,直到节点 traversal
不为空:
while(traversal!=null){
traversal = traversal.next;
}
当 while 循环结束时 traversal
将指向 null
位置。然后在下一行:
lastLink = traversal;
现在 lastLink
为空,下一行:
lastLink.next = toInsert;
正在尝试访问 null
,因此出现了 NPE 问题。您需要通过更改 while 循环条件来修复代码:
while(traversal.next!=null)