java - 如何在java中做一个循环双向链表添加方法
问题描述
我正在循环的 DoublyLinkedList 类以及 Node 内部类中实现 add(E) 方法。
Node 应该作为私有内部类来实现。
DoubleLinkedList 的“first”属性应该指向列表中的第一个节点。它的“大小”属性应该存储列表中元素的数量。
我在我的 add 方法上苦苦挣扎,因为感觉没有什么问题,而且我不知道我还能添加什么代码来修复它。
因此简单介绍一下add方法应该做什么。
add(E) 方法应该将 value 参数添加到列表的末尾。请务必解决列表为空和/或添加的元素是列表中的第一个的情况。
这是我的代码:
public class DoublyLinkedList<E>
{
private Node first;
private int size;
@SuppressWarnings("unchecked")
public void add(E value)
{
if(first == null)
{
first = new Node(value, null, null);
first.next = first;
first.prev = first;
}
else
{
first = new Node(value, first.next, first.prev);
first.next = first.prev;
first = first.next;
first.prev = first;
}
size++;
}
private class Node<E>
{
private E data;
private Node next;
private Node prev;
public Node(E data, Node next, Node prev)
{
this.data = data;
this.next = next;
this.prev = prev;
}
}
}
解决方案
以最小更改修复的代码(只是 add 中的 else 情况):
class DoublyLinkedList<E>
{
private Node first;
private int size;
public void add(E value)
{
if(first == null)
{
first = new Node(value, null, null);
first.next = first;
first.prev = first;
}
else
{
first.prev.next = new Node(value, first, first.prev);
first.prev = first.prev.next;
}
size++;
}
private class Node<E>
{
private E data;
private Node next;
private Node prev;
public Node(E data, Node next, Node prev)
{
this.data = data;
this.next = next;
this.prev = prev;
}
}
}
推荐阅读
- docker - 将新 gem 添加到现有映像并创建新的 Docker 映像
- .net - 没有传递给 Regex 编译器的 RegexOptions 参数的默认点行为
- git - 如何知道 git commit 中删除了哪些文件?
- node.js - 在 WebStorm 中使用 Node.js 和 Flow
- android - 查看寻呼机上的多个页面
- python - 如何理解这个 LSTM 示例?
- android - Android Gradle v 3.1.3 更新将应用启动器图标设为默认
- c# - 模型绑定到可变长度列表
- android - Android Studio 运行“应用程序”,但我找不到任何设备
- c# - 读取角度 6 中来自 asp.net 核心的响应的状态代码