有关Java节点的问题,特别是.next

时间:2011-02-08 00:20:23

标签: java

public void insertIt (Node firstNode, Node newNode) {
 firstNode.next = newNode;
 newNode.next = null;   
}

我找不到使用.next的课程,有人能告诉我吗?另外,我真的不明白这一点。我正在设置firstNode.next=newNode,那么firstNode将如何包含firstNode.next?我希望这是有道理的。

从我的笔记:

> Example 1 to practice with links: 
> Node node1 = new Node(22); Node node2
> = new Node(44); firstNode = node1; node1.next = node2; node2.next = null;
> Produces:
>     firstNode -> 22 -> 44 -> null So firstNode.data is 22 and
> firstNode.next.data is 44. Since
> firstNode.next.next is null, a
> reference to  firstNode.next.next.data
> is an error.
> 
> Example 2 to practice with links: What
> is node3.data ?
>     node3 -> 99 -> null
>     Answer: 99
> 
> Example 3 to practice with links:
> public void insertIt (Node firstNode,
> Node newNode) {
>      firstNode.next = newNode;
>      newNode.next = null;  }

编辑:如果将节点分配给另一个节点会怎样?

例如,head - > 2 - > 3 - >空

node1 = node2;

有什么变化? node1的值是3吗?还是改变它的参考/指针?

2 个答案:

答案 0 :(得分:1)

看到你的评论后,我想我明白你要做的是什么。此代码来自LinkedList Data Structure的实现。您应该阅读维基百科文章,但简而言之,链接列表由Nodes组成,其中包含data元素以及指向列表中下一个元素的指针。因此,可以仅在知道第一个元素的情况下按顺序遍历列表。 .next用于访问相对于当前节点的下一个数据成员。插入元素时,通常需要执行以下操作:

public void insertNode(Node nodeBefore, Node newNode){
  newNode.next = nodeBefore.next;
  nodeBefore.next = newNode;
}

此方法会在Node newNode之后插入Node nodeBefore,以便当您遍历列表时,在到达nodeBefore后,您会到达{{1} }}。通常,列表的末尾由newNode指针表示。

修改要发表评论,课程null可能如下所示:

Node

这就是public class Node{ public Node next; public Object data; } 的来源。它是next

的公共数据成员

答案 1 :(得分:1)

看起来你正在学习链接列表......这个方法实际上在最后添加了另一个节点:

 firstNode          newNode
+------+------+    +------+------+
| data | next-|--->| data | null |
+------+------+    +------+------+