当前位置: 首页 > 知识库问答 >
问题:

Java中的双链列表

督烨赫
2023-03-14

我必须实现类"DoubleChainedList"和"Elem"。DoubleChainedList管理一个双链列表,Elem是关联的节点类,指针指向后继节点和前驱节点。

我必须实施以下方法:

public void removeAtIndex(int i)//删除位置i处的元素

  • public int[]toArray()//将列表作为数组返回

双链列表

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无法解析为变量,我的问题是如何修复它?

共有1个答案

陈德泽
2023-03-14

您的双链列表应该有头部尾部。这些分别是列表的开头和结尾。已指示您命名Elem的列表中的每个节点应具有prevnext类型的Elem。您的Elem类包含另一个名为Node的类-这似乎是多余的,可能会让您感到困惑-将其展平到Elem类中。

您的最小()方法包含一个错误,因为它正在更改列表。创建一个单独的Elem变量来导航列表的内容-不要在这里更改headail

返回整数有误导性。列表为空时的最小值。如果列表为空,则考虑抛出异常。您将发现,在列表实现的几乎每个方法中,都必须为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,保持代码干净,不受和类类型比较的影响, 任何建议都将不胜感激!