gpt4 book ai didi

java - 单链表 : How to add the head

转载 作者:行者123 更新时间:2023-12-01 14:50:19 26 4
gpt4 key购买 nike

我有一个任务来实现一个单链表。我试图找出如何获取头部,但最终出现堆栈溢出错误或空指针错误。有人可以帮助我吗?我已经显示了相关的代码片段:

public class Llist {

private Object data;
private Llist next;
private Llist head = new Llist(null, null);

public Llist(Object d) {
this(d, null);
}

public Llist(Object d, Llist n) {
data = d;
next = n;
}

我有一个添加节点的方法,它会检查是否有头,如果没有则新节点是头:

public static Llist add(Llist l, Object d) {
Llist n = new Llist(d,l);
if(l.head == null) {
l.head = n;
}
return n;
}

当前我收到堆栈溢出错误...但是如果我删除 2 中将 head 设置为 null 的行

最佳答案

您的链接列表根本没有正确设置。链表应该只包含对头节点的引用,并且头节点应该保存对下一个节点的引用。它应该看起来更像:

public class Llist {

private Object data;
private Llist next;

public Llist(Object d) {
this(d, null);
}

public Llist(Object d, Llist n) {
data = d;
next = n;
}

在这种情况下,您应该始终保留头节点的副本,否则您会丢失整个列表,因为在此实现中您的列表和节点是相同的类型。

更好的实现应该有一个单独的 Node 类。像这样的东西:

public class Llist {
private Node head;

public Llist(Object o) {
head = new Node(o);
}

public void add(Object o){
curr = head;
while(curr != null){
curr = curr.next;
}
curr.next = new Node(o)
}

public class Node{
Object data;
Node next;

public Node(Object o){
data = o;
next = null;
}
}

关于java - 单链表 : How to add the head,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14946468/

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