gpt4 book ai didi

java - 初始化单链表 Java

转载 作者:行者123 更新时间:2023-11-30 11:40:37 26 4
gpt4 key购买 nike

我正在尝试在 NumLinkedList 类中将抽象数据类型 NumList 实现为单向链表。

public class NumLinkedList implements NumList
{

Node head;
int nItem;

private class Node
{
public Node next;
public double value;
public Node(double i, Node j)
{
value = i;
next = j;

}

}

public NumLinkedList()
{
head = null;
nItem = 0;

}

是我的初始化,我在使用以下方法时遇到了问题。

public void print()
{
Node currNode = head;
while(currNode.next != null)
{
currNode = currNode.next;
System.out.println(currNode.value);
}

}

public int size()
{
int size = 0;
Node currNode = head;
while(currNode.next != null)
{
currNode = currNode.next;
size++;
nItem++;

}
return size;

}

public void insert(int i, double value)
{
if( i < 0)
{
System.out.println("Error. out of bounds.");
}
if ( i > size())
{
Node currNode = head;
for(int j = 0; j < i; j++)
{
currNode = currNode.next;
}
currNode.next = new Node(value,null);
}

if ( i <= size())
{
Node currNode = head;
for(int j = 0; j < i-1; j++) // this moves CurrNode to the i-1th node
{
currNode = currNode.next;
}
currNode.next = new Node(value,currNode.next);
}

nItem++;
}

当我运行我的测试代码时,

public static void main (String[] args)
{
NumLinkedList test;
test = new NumLinkedList();

//System.out.println("this is how many initial items the initialized list has");
//System.out.println(test.size());
test.insert(1, 0.1);
System.out.println("have tried to insert value 0.1 @ position 1, that is the first element in list.");
test.print();
System.out.println("tried print(). did it work?");
test.insert(4, -1);

我得到一个错误

test.insert(1, 0.1);

,指的是

if ( i > size())

while(currNode.next != null)

因为我的数组 ADT 初始化也失败了,我相信我的列表 ADT 也被错误初始化了。很难在 Google 上找到合适的示例,是否有任何 ADT 初始化引用?

最佳答案

您的问题不在于初始化,这很好,而在于方法本身。

问题是您正在将 head 初始化为 null,但是随后,在 printsize,你正在执行 currNode = head,这也使它成为 null,然后在 currNode.next 上循环。那将在那里抛出一个 NullPointerException。您需要转到所有方法并为极限情况添加特殊代码:

对于打印:

if ( head == null )
return;

对于尺寸:

if ( head == null )
return 0;

或者,您可以简单地将整个 size 方法替换为简单的 return nItem; 语句。

对于插入:

if ( head == null )
{
head = new Node(value,null);
return;
}

顺便说一句,在你的 insert 中,你还需要在第一个 if 中有一个 return,并且你需要替换第三个 ifelse

关于java - 初始化单链表 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12631333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com