我必须实现类"DoubleChainedList"和"Elem"。DoubleChainedList管理一个双链列表,Elem是关联的节点类,指针指向后继节点和前驱节点。
我必须实施以下方法:
public void removeAtIndex(int i)//删除位置i处的元素
双链列表
import java.util.Collections;
import java.util.LinkedList;
public class DoubleChainedList {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(4);
list.add(1);
list.add(7);
list.add(2);
list.add(9);
Integer[] arr = list.toArray(new Integer[0]);
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public int[] toArray() {
Integer[] arr = list.toArray(new Integer[0]);
return null;
}
public int smallest() {
int min = Integer.MAX_VALUE;
// Check loop while head not equal to NULL
while (head != null) {
if (min > head.data)
min = head.data;
head = head.next;
}
return min;
}
要素:
public class Elem {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private Node head = null;
private Node tail = null;
public class Node {
public int data;
public Node next;
public Node prev;
}
}
我的问题:它显示了以下错误:head无法解析为变量,我的问题是如何修复它?
您的双链列表
应该有头部
和尾部
。这些分别是列表的开头和结尾。已指示您命名Elem
的列表中的每个节点应具有prev
和next
类型的Elem
。您的Elem
类包含另一个名为Node
的类-这似乎是多余的,可能会让您感到困惑-将其展平到Elem
类中。
您的最小()
方法包含一个错误,因为它正在更改列表。创建一个单独的Elem
变量来导航列表的内容-不要在这里更改head
或ail
。
返回整数有误导性。列表为空时的最小值。如果列表为空,则考虑抛出异常。您将发现,在列表实现的几乎每个方法中,都必须为is empty情况定义特殊处理。
public class DoubleChainedList {
private Elem head;
private Elem tail;
// using protected here because you aren't exposing this to consumers
// but its available for extension
protected class Elem {
private int data;
private Elem prev;
private Elem next;
}
public int smallest() {
if (head == null) {
throw new Exception("list is empty - no smallest value");
}
int min = Integer.MAX_VALUE;
Elem cursor = head;
while (cursor != null) {
min = Math.min(min, cursor.data);
cursor = cursor.next;
}
return min;
}
}
我试图打印一个双链接列表,从tail元素开始,以first元素结束。我下面的代码就是这样做的,但出于某种原因,我也返回了被删除的项目。当我从头到尾打印列表时,它不会这样做。Idk,如果是toString导致了这个或dequed方法。我把两者都包括在内。
我在分析一个删除节点的双链表函数。然而,我有点困惑。 为什么有一个tmp=p.prev和p.prev=tmp。这些额外线路的用途是什么?最后,为什么没有使用“del”删除节点?代码末尾不应该是“delp”吗? 非常感谢。
我在JavaScript中构建链表。我有一个部分不明白。 问题是插入函数! 假设我已经有了一个B C节点。 我想在B后面插入K。 当前,B的下一个和上一个分别是C和A。 C的前一个元素是B。 一旦我把K放在B后面, a B K C (1)K的下一个元素将是C (2)K的前一个元素将是B (3)B的下一个元素是K (4)C的前一个元素是K。 在我在Insert函数中编写的代码中,下面的每一行代码都应
我已经得到了实现双向链表的框架。我被PushFront()方法难住了。方法应该将提供的元素添加到链表的前面,并且应该将地址返回到新的头节点。我对如何访问列表的当前头部感到困惑,以便我可以将其分配给pNext指针。到目前为止,PushTop()方法看起来是这样的: 元素类构造函数: 数据类: 主要: 我的理解是,您通常会在调用PushFron()时提供头的地址,但是因为我没有提供,我不确定如何访问它
给定单链接列表:
我试图在c语言中的双链表中使用null对象模式,但我似乎找不到一种在保持代码整洁的同时使用它的方法。 问题出在以下代码中: 如果下一个/上一个节点是,则和将返回对象。 此操作失败的用例-当节点为头节点时: 下面将第二个节点的上一个指针设置为导致内存泄漏的NullNode对象。 我在这里要做的是保持NOP,保持代码干净,不受和类类型比较的影响, 任何建议都将不胜感激!