- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个添加函数,该函数将使用节点将新元素添加到链表,但由于某种原因它不起作用,我认为我做错了。
到目前为止,这是我的代码:
public void add(int pos, T e){
Node<T> active = this.head;
Node<T> pre = null;
int counter = 0;
while ((active != null) && (counter < pos)){
pre = active;
active = active.getRight();
counter = counter + 1;
}
if (counter == pos){
Node<T> mynode = new Node<T>(e);
if (pre == null){
this.head = mynode;
pre.setLeft(mynode);
}
else{
pre.setRight(mynode);
this.tail = mynode;
}
mynode.setRight(active);
mynode.setLeft(pre);
}
}
最佳答案
在双向链表中,一个简单的添加方法如下;
// add method for single node
public void add(T value) {
if(head == null)
head = new Node<T>(value);
else {
Node<T> temp = head;
while(temp.next != null)
temp = temp.next;
tail = temp.next = new Node<T>(value);
tail.prev = temp;
}
size++;
}
但是,你想添加到列表中的特定位置;
// add method for specific position
// pos must be smaller/equal than the size of the list
public void addPos(int pos, T value) {
if(pos > size) // pos must be smaller/equal than size
return;
Node<T> newNode = new Node<>(value);
size++;
if(pos == 0) {
newNode.next = head;
head.prev = newNode;
head = newNode;
return;
} else if(pos == size-1) {
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
} else {
Node<T> temp = head;
for(int i = 0; i < pos; i++)
temp = temp.next;
// insert newNode in the middle of temp.prev and temp
// temp.prev <-> newNode <-> temp
// attach newNode's prev and next references
newNode.next = temp;
newNode.prev = temp.prev;
// attach adjacent node's references to newNode
temp.prev.next = newNode;
temp.prev = newNode;
}
}
public class DoublyLinkedList<T> {
protected Node<T> head;
protected Node<T> tail;
private int size;
public DoublyLinkedList() {
this.head = null;
this.tail = null;
this.size = 0;
}
// Overloaded add method for T[] list
public void add(T[] list) {
for(int i = 0; i < list.length; i++)
add(list[i]);
}
// add method for single node
public void add(T value) {
if(head == null)
head = new Node<T>(value);
else {
Node<T> temp = head;
while(temp.next != null)
temp = temp.next;
tail = temp.next = new Node<T>(value);
tail.prev = temp;
}
size++;
}
// add method for specific position
// pos must be smaller/equal than the size of the list
public void addPos(int pos, T value) {
if(pos > size) // pos must be smaller/equal than size
return;
Node<T> newNode = new Node<>(value);
size++;
if(pos == 0) {
newNode.next = head;
head.prev = newNode;
head = newNode;
return;
} else if(pos == size-1) {
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
} else {
Node<T> temp = head;
for(int i = 0; i < pos; i++)
temp = temp.next;
// insert newNode in the middle of temp.prev and temp
// temp.prev <-> newNode <-> temp
// attach newNode's prev and next references
newNode.next = temp;
newNode.prev = temp.prev;
// attach adjacent node's references to newNode
temp.prev.next = newNode;
temp.prev = newNode;
}
}
public static class Node<T> {
protected T value;
protected Node<T> prev;
protected Node<T> next;
public Node(T value) {
this.value = value;
this.next = null;
this.prev = null;
}
@Override
public String toString() {
return value.toString();
}
}
public void printList() {
System.out.print("List : ");
if(head == null)
System.out.printf(" <empty>\n");
else {
Node<T> temp = head;
while(temp != null) {
System.out.print(temp + " ");
temp = temp.next;
}
}
System.out.println();
}
public void printReverse() {
System.out.print("List Reversed: ");
if(head == null)
System.out.printf(" <empty>\n");
else {
Node<T> temp = tail;
while(temp != null) {
System.out.print(temp + " ");
temp = temp.prev;
}
}
System.out.println();
}
public int getSize() {
return size;
}
}
public class TestDoublyLinkedList {
public static void main(String[] args) {
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
Integer[] intList = { 1, 3, 5, 7, 9 };
list.add(intList);
printState(list);
list.addPos(3, 88);
printState(list);
}
public static void printState(DoublyLinkedList<Integer> list) {
list.printList();
list.printReverse();
System.out.println("Head: " + list.head);
System.out.println("Tail: " + list.tail);
System.out.println("Size: " + list.getSize());
System.out.println("************************\n");
}
}
List : 1 3 5 7 9
List Reversed: 9 7 5 3 1
Head: 1
Tail: 9
Size: 5
************************
List : 1 3 5 88 7 9
List Reversed: 9 7 88 5 3 1
Head: 1
Tail: 9
Size: 6
************************
关于java - 使用节点的双链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251830/
好吧,我的教授(数据结构课)布置了这个:你的任务是编写一个程序来更新双向链表中的字符访问频率。该程序应一次从包含许多字符的文本文件中读取一个字符。为了方便起见,不要计算空格。每次访问一个字符时,将其访
嗨我想知道如何将我的对象从 arrayList 复制到双向链表?我的 DNode 构造函数也是: public DNode(Object element, DNode prev, DNode
我想实现 Split 函数来学习 C 的困难方式双链表,但要做到这一点,我需要每个节点都有其索引号,就像常规列表、数组一样。当我执行“Push”功能(将新节点添加到列表末尾)时,一切都很好,但是当我执
struct Node { int data; Node *next; Node *prev; }; class DoublyLinkedList { ofstream cout3; Node *he
我刚刚开始学习 C,并且(似乎)到目前为止,大多数东西都在点击。但是,我在尝试使用双链表 时遇到了一些问题。当我尝试构建/运行此代码时,我不断收到 seg-fault。我正在通过 NetBeans 使
我试图分两部分实现双链表:第一个是创建列表的实际功能;第二个是模拟器 - 包含一些线程、读取器和写入器(每个线程都在 while 循环中弹出和插入双链表),以及一个垃圾收集器线程,如果列表太大(根据
我正在分析我要在其上构建双向链表的这段代码: struct dplist_node { dplist_node_t * prev, * next; element_t element; };
我正在尝试制作一个简单的双链表,我首先使用了 (switch): int choice, data; switch(choice) { case 1:
我是 C 编程的初学者。我的任务是使用双链表创建学生列表。该应用程序应具有三个功能:显示列表、添加新学生和通过 ID 号删除学生。我做到了,它运行得很好。我想请教几个问题: 是否使用不当? 如果有缩短
我需要在 C 中的双链表中,但它必须用于不同的类型。在 C++ 中,我们为它使用模板。我在哪里可以找到 C 中带有抽象类型项的双链表的示例。 谢谢 最佳答案 您可以采用几种方法,其中一种涉及在您的 A
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
最近我开始学习 C++,并且开始玩简单的结构。我在双链表上苦苦挣扎,我被困在“prev”指针上;/“Next”指针工作正常但“prev”不工作,我不知道为什么。 #ifndef _DOUBLELIST
在此处提问之前,我会尽力查找问题的解决方案,但我遇到了一些困难。虽然有一个用于 Java 的,但它并没有帮助我理解我的实现哪里出了问题。因此,事不宜迟,这里是一些背景,然后是问题。 尝试此操作的背景/
双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。 PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作。
我的 DLL 插入函数有问题。附加到列表上没有问题,但是当我有一个包含 5 个对象的列表并且我想插入节点之间时,它什么也不做。我一直在四处寻找数小时来解决这个问题,但没有任何改变。 这是我的代码:在
我有一个具有这些属性的 class Node: int value; Node* next; Node* prev; 当我初始化列表以了解哪个是第一个节点时,我有一个带有属性 Node* first
我已经编写了这段代码,一般来说效果很好,但是当我们到达 i == 74 列表元素为 4 - 11 - 18 - 4 - 10 - 18 - 17 - 22 - 14 - 29 和 swapNodes(
你能帮我弄清楚为什么我会收到这些 2019 错误吗?我很确定所有文件都保存在正确的位置,而且我认为我对头文件使用了正确的约定?这是我的系统编程类(class)的实验室。 错误如下: 1>main.ob
我是一名优秀的程序员,十分优秀!