Java实现泛型双向链表:插入、删除与遍历

需积分: 10 10 下载量 148 浏览量 更新于2024-09-07 收藏 4KB TXT 举报
"Java编程实现一个泛型化的双向链表,包括插入、删除、查询等基本操作" 在Java编程中,双向链表是一种常见的数据结构,它允许在链表的前后两端进行插入和删除操作。这个题目要求设计一个带有表头的双向链表,其中的数据类型可以是任意的,这需要用到Java的泛型特性。下面将详细讲解如何实现这个需求。 首先,我们需要定义一个`Node`类来表示链表中的节点,每个节点包含一个数据域和两个指针,分别指向前一个节点和后一个节点。代码如下: ```java public class Node<T> { protected T value; // 节点存储的数据 protected Node pre; // 指向前一个节点的引用 protected Node next; // 指向后一个节点的引用 public Node() { this(null, null); } public Node(T value, Node pre, Node next) { this.value = value; this.pre = pre; this.next = next; } } ``` 接下来,我们创建`DoubleList`类,它代表我们的双向链表。这个类需要维护三个成员变量:`head`表示链表的起始节点,`rear`表示链表的尾节点,以及`sum`表示链表中节点的数量。 ```java public class DoubleList<T> { protected Node<T> head; protected Node<T> rear; protected int sum; } ``` 然后,我们需要实现题目中提到的方法: 1. `insert(int pos, T no)`:在指定位置插入一个节点。首先检查位置是否合法,然后找到插入位置的前一个节点,创建新节点并更新相关连接。 2. `insertEnd(T no)`:在链表末尾插入节点。新节点将插入到`rear`的前一个节点和`rear`之间。 3. `delete(int pos)`:删除指定位置的节点。同样需要先检查位置的合法性,然后找到要删除的节点,并更新相邻节点的链接。 4. `delete(T x)`:删除链表中所有值等于`x`的节点。需要遍历链表找到匹配的节点并进行删除。 5. `size()`:返回链表中节点的数量,直接返回`sum`即可。 6. `isEmpty()`:判断链表是否为空。如果`head`和`rear`相等且指向null,则链表为空。 7. `traverse()`:遍历链表并打印所有元素。从`head`开始,直到遇到`rear`。 8. `getData(int pos)`:获取指定位置的节点数据。同样需要检查位置的合法性,然后找到对应位置的节点。 这些方法的实现已经包含在提供的部分代码中,只需补充`delete(T x)`和`getData(int pos)`的方法即可完成整个双向链表的实现。在完成所有方法后,可以在`main`函数中编写测试代码,对这些功能进行验证。 通过这样的实现,我们可以创建一个灵活的双向链表,可以存储任何类型的数据,并能方便地进行插入、删除、查询等操作。这种数据结构在很多场景下都非常有用,例如在需要高效地在中间位置进行插入和删除操作时。