gpt4 book ai didi

java - 链表。头尾引用

转载 作者:行者123 更新时间:2023-11-29 05:28:27 25 4
gpt4 key购买 nike

我正在尝试为我的链表类添加和删除方法。我用名称 Head 和 Tail 做了 2 个引用。

头 -> 1 -> 2 -> 3 -> 尾:空

当我尝试删除特定节点时,我总是遇到问题,因为 Java 说我越界了。我认为这是因为我的头没有指向第一个节点?你们有什么感想?或者我正在以完全错误的方式解决这个问题......

public class LinkedList{

private Node head;
private Node tail;
private int listCount;

public LinkedList()
{
head = new ListNode(null);
tail = new ListNode(null);
listCount = 0;
}

public void add(Object elem){
ListNode newNode = new ListNode(elem);
if (size() == 0){
newNode = head;
tail = head;
}
newNode.setLink(tail);
tail = newNode;
listCount++;
}

public Object delete(int index)
// post: removes the element at the specified position in this list.
{
// if the index is out of range, exit
if(index < 1 || index > size())
throw new IndexOutOfBoundsException();

ListNode current = head;
for(int i = 1; i < index; i++)
{
if(current.getLink() == null)
throw new IndexOutOfBoundsException();

current = current.getLink();
}
current.setLink(current.getLink().getLink());
listCount--; // decrement the number of elements variable
return current.getInfo();
}

public int size() {
return listCount;
}

}

public class Node {

private Node link;
private Object info;

public Node(Object info)
{
this.info = info;
link = null;
}

public void setInfo(Object info)
{
this.info = info;
}

public Object getInfo()
{
return info;
}

public void setLink(Node link)
{
this.link = link;
}

public Node getLink()
{
return link;
}
}

最佳答案

我认为这是因为您的head 从来没有链接到任何东西。我会做的是在你的添加方法中修复它,检查列表的 size ;如果为 0,则将 head 设置为新元素并将 tail 设置为等于 head。如果为 1,则将 head 链接到新节点并设置 tail。如果是 2,只需将 tail 的链接设置到新节点并设置 tail(就像您现在所做的那样)。

此外,我不确定您是如何实现它的,但是 newNode.setLink(tail); 似乎是错误的...tail 应该链接到 新节点。从它的外观来看,您似乎正在尝试执行 newNode -> tail

编辑:好的,这就是我要尝试的原因

public void add(Object elem){
ListNode newNode = new ListNode(elem);
if (size() == 0){
newNode = head;
tail = head;
}else if(size() == 1){
head.setLink(newNode);
tail = newNode;
}else{
tail.setLink(newNode);
tail = newNode;
}
listCount++;
}

关于java - 链表。头尾引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940032/

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