我目前正在实现一个带有虚拟头部节点的循环双链表。我的add函数(在给定索引、开始或结束时添加一个元素)似乎可以完美地工作,但我无法推断出一个有效的indexOf(返回元素的索引)或remove(在给定索引处删除节点)方法。
调试时,indexOf似乎获取了错误的索引。当给出以下列表时:
[Alabama, Alaska, Arizona, Arkansas, Wyoming, California]
使命感
list.remove(indexOf("Wyoming"));
回报
[Alabama, Alaska, Arizona, Arkansas, Wyoming, ]
以下是indexOf函数:
public int indexOf(E e) {
Node<E> current = head;
for (int i = 0; i < size; i++) {
if (e.equals(current.element)) {
return i;
}
current = current.next;
}
return -1;
}
这里是删除函数:
public E remove(int index) {
if (index < 0 || index >= size) {
throw new NoSuchElementException();
} else if (index == 0) {
return removeFirst();
} else if (index == size - 1) {
return removeLast();
} else {
Node<E> previous = head;
for (int i = 1; i < index; i++) {
previous = previous.next;
}
Node<E> current = previous.next;
previous.next = current.next;
size--;
return current.element;
}
}
如果head
应该始终为null
,那么您的indexOf()
方法似乎不正确
public int indexOf(E e) {
Node<E> current = head.next; // Add this to effectively begin with the first index of your list
for (int i = 0; i < size; i++) {
if (e.equals(current.element)) { // This will never be equals, because of the first time current being null
return i;
}
current = current.next;
}
return -1;
}
本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。
我创建了一个双循环链表。 我需要知道每个节点到头部的距离。 因为当我必须删除或获取具有特定密钥的节点时,如果两个节点具有相同的密钥和相同的距离,则必须删除或获取这两个节点,否则必须删除最靠近头部的节点。 我不知道如何计算距离,因为它是圆形的。。。 这个链表的插入就是这样工作的。 所有的节点都去追头。 例: 1)头部 2) 头部A(插入A) 3) 头部B-A(插入B) 4) 头部C-B-A(插入C)
双向循环链表 在“数据结构”课程中,如果创建某种数据结构的双循环链表,通常采用的办法是在这个数据结构的类型定义中有专门的成员变量 data, 并且加入两个指向该类型的指针next和prev。例如: typedef struct foo { ElemType data; struct foo *prev; struct foo *next; } foo_t; 双向循环链表的
基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。
1.一般链表 图解链表: 链表 实现: <!doctype html> <html> <head> <meta charset="utf-8" > </head> <body> <script> function Node(ele) { this.ele=ele; this.next=null; } func
我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类