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

java中循环双链表的插入方法

常翰
2023-03-14

我是java的初学者。我试图编写一个程序,在给定位置插入一个节点,并显示整个链表。但是,我的节点似乎没有被插入,当我显示链接列表时,只显示第一个节点值。有人能解释一下我哪里出了问题吗?

//这里,位置是索引位置。索引从0开始,以大小1结束,就像一个数组。

//插入代码

public void insertIntoCircularDoublyLinkedList(int location,int num){
    Node node=new Node();
      Node tempNode=head;
      int index=0;

      while(index<location){
        tempNode=tempNode.next;
        index++;
      }
      node.prev=tempNode.prev;
      node.next=tempNode;
      tempNode.prev.next=node;
      tempNode.prev=node;
    }
    size++;
  }

//遍历代码

 void traverseCDLL() {
    if (head != null) {
      Node tempNode = head;
      for (int i=0; i < size; i++) {
        System.out.print(tempNode.value);
        if (i != size - 1) {
          System.out.print(" -> ");
        }
        tempNode = tempNode.next;
      }
    } else {
      System.out.println("The CDLL does not exist.");
    }
    System.out.println();
  }

//主要方法

public static void main(String[] args) {    
CircularDoublyLinkedList CDLL=new CircularDoublyLinkedList();   
CDLL.createCircularDoublyLinkedList(8);   
CDLL.insertIntoCircularDoublyLinkedList(1, 1);
CDLL.insertIntoCircularDoublyLinkedList(2, 2);
CDLL.insertIntoCircularDoublyLinkedList(3, 3);
CDLL.insertIntoCircularDoublyLinkedList(4, 4);

CDLL.traverseCDLL();
}

输出:

8 -> 0 -> 0 -> 0 -> 0

共有2个答案

公良弘毅
2023-03-14

应该为节点指定一个值。如果将节点类设计得很好,则其构造函数可以将此值作为参数。

其他一些问题:

>

当列表为空时,应该避免错误,只创建引用自身并返回的头节点

我不会在方法名中使用术语“CircularLinkedList”,因为你的类已经有了这个名字,而且很明显这个方法处理的是什么。

所以:

public void insert(int location, int num) {
    Node node = new Node(num); // <-- pass num to the constructor
    if (head == null) { // Boundary case
        head = node;
        head.next = head.prev = head;
        return;
    }
    Node tempNode = head;
    int index = 0;
    while (index < location) {
        tempNode = tempNode.next;
        index++;
    }
    node.prev = tempNode.prev;
    node.next = tempNode;
    tempNode.prev.next = node;
    tempNode.prev = node;
    if (location == 0) { // Make new node the head
        head = node;
    }
    size++;
}
司徒杜吟
2023-03-14

您忘记设置node.value=num插入IntoCircularDoublyLinkedList

 类似资料:
  • 我尝试实现循环链表的insert方法。我想我取得了一些成功。 问题:当我显示列表时。display方法将循环,因为链接的每个next变量都链接到一个非Null节点对象。所以head永远不会是空对象。根据我对单链表的回忆,head总是指向列表中的第一个节点或其中包含数据的第一个节点。 我对循环链表的概念理解:根据我的理解,循环链表有点像一个单链表,但有一点小的变化:尾部对象的下一个变量指向头部。 来

  • 我创建了一个双循环链表。 我需要知道每个节点到头部的距离。 因为当我必须删除或获取具有特定密钥的节点时,如果两个节点具有相同的密钥和相同的距离,则必须删除或获取这两个节点,否则必须删除最靠近头部的节点。 我不知道如何计算距离,因为它是圆形的。。。 这个链表的插入就是这样工作的。 所有的节点都去追头。 例: 1)头部 2) 头部A(插入A) 3) 头部B-A(插入B) 4) 头部C-B-A(插入C)

  • 我是java的初学者。我试图编写一个程序,在给定的位置插入一个节点,并显示整个链表。然而,我的节点似乎没有被插入,当我显示链表时,只显示第一个节点值。有人能解释一下我哪里出错了吗? //这里,位置是索引位置。索引从0开始,以大小-1结束,就像数组一样。 //插入代码 //遍历代码 //主要方法 输出:

  • 双向循环链表 在“数据结构”课程中,如果创建某种数据结构的双循环链表,通常采用的办法是在这个数据结构的类型定义中有专门的成员变量 data, 并且加入两个指向该类型的指针next和prev。例如: typedef struct foo { ElemType data; struct foo *prev; struct foo *next; } foo_t; 双向循环链表的

  • 基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。