如何在 Java 循环链表中设置下一个值?

Posted

技术标签:

【中文标题】如何在 Java 循环链表中设置下一个值?【英文标题】:How to set next value in a Circularly Linked List in Java? 【发布时间】:2015-10-03 09:18:38 【问题描述】:

这是我目前所拥有的:

public void insert(int position, ValueNode value) 
  if (position == 1) 
    this.nextInRow = value;
  
  ValueNode current = this.getFirst();
  if (position > 1) 
    current.setNext(current.next);
  
    value.setNextInRow(current.getNext());

使用第一个 if 语句正确设置了头节点。在这个列表中,我们已经知道位置,所以我认为我们不需要 while 循环,因为我们知道将新节点放在哪里。

我创建了一个名为 current 的临时节点来保存下一个节点指针,但现在它将指针设置为 null。我的问题是我不知道下一个节点指针指向哪里。任何帮助将不胜感激。

【问题讨论】:

除非你有一个包含节点的数组,否则你需要那个 while 循环来找到正确的位置。但是这段代码不足以帮助你——我们不知道getFirst 做了什么,列表是单链接还是双链接。您需要添加ValueNode 和至少setNext() 以及此代码或它所依赖的任何代码中引用的任何方法和变量。 getFirst 只返回列表中的第一个节点......它是一个 SLL .. 但最后一个节点应该指向第一个节点以使其循环...... 【参考方案1】:

区分使用值创建节点和设置下一个节点操作。

你的数据结构可以是这样的:

class Node 
   int val;
   Node next;
   Node previous;

  //setters and getters and constructors


1) 对于所有新值都应该有一个节点

Node createNode(int val) 
    Node newNode = new Node(val);
    newNode.next = null;
    newNode.previous = null;
    return newNode; 
  

2) 从root开始定位newNode或保持当前节点设置为next

 currentNode.setNext(Node newNode);
 //iterate the currenNode with newNode
 currentNode = newNode;

 ...

 // implement the setNext and mark current as previous for newNode
 void setNextNode(Node newNode) 
      this.next = newNode;
      newNode.setPrevious(this); 
 

【讨论】:

值得注意的是,插入方法占据了一个位置,所以我们知道将新节点放在哪里......我认为我的问题是我不知道如何存储下一个值......例如,如果我插入 node2 但我必须让 node2 指向 node3 .. 我怎么知道 node3 在哪里 .. 这就是为什么首先创建 val 的节点并将此节点设置为前一个节点的下一个节点。这会将它们连接在一起。

以上是关于如何在 Java 循环链表中设置下一个值?的主要内容,如果未能解决你的问题,请参考以下文章

(java实现)双向循环链表

java-----循环链表

java-----循环链表

JAVA 链表操作:循环链表

单向循环链表

数据结构第五篇——线性表的链式存储之循环链表