构建单链表

bin*_*mer 1 java data-structures

我正在尝试用 Java 构建一个数据结构,其内部列表由包含整数的单链接列表组成。我的数据结构架构遇到问题。它需要有一个具有可以合并、拆分和给出内部列表大小的函数的内部类。

假设内部列表的大小将发生变化,并且将删除大小和数据以巩固和优化数据结构。

我有一个与数据结构交互的驱动程序类。然后我有一个数据结构类,它将具有内部类。

当单链表随着我的数据折叠和扩展时,我应该在哪里放置添加/删除顶级列表的方法?

我应该上多少节课?驱动程序、数据结构(带有内部类)...更多?

我只需要来自一位强大的编码人员的一点指导,我在自上而下的设计中进行了多次尝试,并且我已经阅读和搜索了。我只需要一些指导。我附上了数据结构的图像。

请注意:

内部列表必须实现为具有虚拟标头和尾指针的单链表,并且我不得将 Java Collections API 中的任何数据结构用于内部列表。对于顶级列表,我必须使用 Java Collections API 中的通用 LinkedList 类。

Lui*_*oza 5

注意:这看起来像是一项作业,否则就没有必要重新发明轮子了。知道了这一点,我不会提供具体的代码,只是伪代码(除了一些关键字,如classint和类似的),没有像 getter 或 setter 这样有用的方法,没有额外的字段等。生成所有必要的 Java 将是你的工作代码来完成这项工作。

\n\n
\n\n
\n

我不知道从哪里开始,我是链表新手

\n
\n\n

首先定义列表中元素的结构。这个怎么做?查看要求(强调我的要求):

\n\n
\n

在 Java 中构建一个具有内部列表的数据结构,该内部列表由包含整数的单链接列表组成

\n
\n\n

您需要一个首先可以保存整数值并表现为单链表的数据结构。从单链表的定义来看,该结构体包含两个元素:

\n\n
    \n
  1. 要保存的整数数据
  2. \n
  3. 指向下一个类似数据结构的指针
  4. \n
\n\n

这可以这样解决:

\n\n
class DataStructure {\n    int data;\n    DataStructure next;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在您已经有了支持单链表的结构,您需要一个新的结构来作为链表并定义它的行为。这可以按照您的要求中所述来解决:

\n\n
\n

内部列表必须实现为具有虚拟头指针的单链表

\n
\n\n

将其转换为伪代码:

\n\n
class SinglyLinkedList {\n    DataStructure head;\n    DataStructure tail;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

就是这样。现在您已经有了SinglyLinkedList,您只需要定义行为即可。再次回顾一下要求:

\n\n
\n

它需要有一个内部类,其中包含可以合并的 f\xcc\xb6u\xcc\xb6n\xcc\xb6c\xcc\xb6t\xcc\xb6i\xcc\xb6o\xcc\xb6n\xcc\xb6s\xcc\xb6 方法,split,并给出内部列表的大小。

\n
\n\n

从这里,我们可以为数据结构定义至少三种方法SinglyLinkedListmergesplitsize。从中改编最新的课程:

\n\n
class SinglyLinkedList {\n    DataStructure head;\n    DataStructure tail;\n    //added this method just to know you need to add data to your singly linked list\n    public void add(int data) {\n    }\n    //you merge a list with another list\n    public void merge(SinglyLinkedList singlyLinkedList) {\n    }\n    //you split the list into two or more lists\n    public SinglyLinkedList[] split() {\n    }\n    //the size of the list is a numeric positive value\n    public int size() {\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑(根据您的编辑和查看图片)

\n\n

需要定义另一个数据结构来保存单链表的列表。按要求:

\n\n
\n

对于顶级列表,我必须使用Java Collections API 中的通用 LinkedList 类。

\n
\n\n

然后,您只需要一个使用LinkedList包含单链表的新结构:

\n\n
class SinglyLinkedListHolder {\n    LinkedList<SinglyLinkedList> holder;\n\n    public SinglyLinkedListHolder () {\n        holder <- new LinkedList<SinglyLinkedList>();\n    }\n    //this holder should at least add new singlyLinkedList in the bigger list\n    public void add(SinglyLinkedList singlyLinkedList) {\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

注意:我注意到您尝试使用泛型定义结构:

\n\n
private static class Node<T> {\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

强烈建议您在真正掌握单链表如何工作的主要概念之前不要这样做。这可能需要一些时间,但最好一步一步来。使该结构正常工作后,您可以轻松(实际上,取决于您的实现)将该结构替换为:

\n\n
class DataStructure<T> {\n    T data;\n    DataStructure next;\n}\n
Run Code Online (Sandbox Code Playgroud)\n