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

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

您忘记设置节点。插入循环双链接列表中的value=num

终祯
2023-03-14

您应该为节点赋值。如果您很好地设计了Node类,它的构造函数可以将此值作为参数。

其他一些问题:

>

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

我不会在方法名称中使用术语“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++;
}
 类似资料:
  • 我是java的初学者。我试图编写一个程序,在给定位置插入一个节点,并显示整个链表。但是,我的节点似乎没有被插入,当我显示链接列表时,只显示第一个节点值。有人能解释一下我哪里出了问题吗? //这里,位置是索引位置。索引从0开始,以大小1结束,就像一个数组。 //插入代码 //遍历代码 //主要方法 输出:

  • 我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢

  • 给我一个指向排序双向链表的头节点的指针和一个插入到列表中的整数。我被告知创建一个节点并将其插入到列表中的适当位置,以保持其排序顺序。头节点可能是NULL。 样本输入 空,数据=2 NULL 样本输出 NULL NULL 我试过上面的问题。但我的程序因超时而终止。在下面的代码中,我做错了什么。假设节点类和主函数已经存在。非常感谢!!

  • 我有一个带有前哨节点的双向链表,我需要用O(n^2)复杂度的插入排序来排序。我已经写了这段代码,但它并没有像它应该的那样工作。 对于插入排序,特别是代码,有什么帮助吗? 大小是我的列表中有多少个元素。我的哨兵有var=-1,所以当我处于头部时我想停止,这就是为什么我使用这个。 和只要我们处于某个位置,它就是真的!=哨兵节点。 在具体的例子中,我的列表中有35个整数: 5 9 1 1 1 1 1 1

  • 分段故障发生在“电流->prev->next=temp”上。我试图打印地址以了解为什么会发生这种情况,并发现在输入中第一个节点的前一个元素总是指向NULL。有人能解释为什么会发生这种情况以及如何修复它吗?谢谢你。

  • 我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。