当前位置: 首页 > 知识库问答 >
问题:

循环双链表indexOf和remove函数不正确

薛彭薄
2023-03-14

我目前正在实现一个带有虚拟头部节点的循环双链表。我的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;

    }
}

共有1个答案

袁恩
2023-03-14

如果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 链接类