有人可以解释一下Java中的Linked List吗?

时间:2016-04-07 08:32:55

标签: java linked-list

我正在学习考试,我并不太了解链表。我想知道是否有人可以向我解释几行代码。

class Node{
  Node next, previous;
    final int value;
  Node(int v){
    value = v;
  }
}

public class Linked{
  Node start = null, end = null;
  // Add a node on the end
  void append(int v){
    Node n = new Node(v);
    if (start == null){
      start = end = n;
      return;
    }
    end.next = n;
    n.previous = end;
    end = n;
  }
// Add a node to the front
void prepend(int v){
  Node n = new Node(v);
  if (start == null){
    end = start = n;
    return;
  }
  n.next = start;
  start.previous = n;
  start = n;
 }
}

我需要解释的行是append和prepend方法中的最后3行。注释解释了每种方法的目的,但我不明白在这些代码行中实际做了什么。提前谢谢。

4 个答案:

答案 0 :(得分:3)

<强>追加

当您希望在列表末尾添加节点时,它应该链接到当前的最后一个节点:

end.next = n; // the current last node points to the new node
n.previous = end; // the new node points back to the previous node 
                  // (which is the current last node)
end = n; // the new node becomes the last node

prepend 类似:

n.next = start; // the node that follows the new node is the current first node
start.previous = n; // the previous node of the current first node is the new node
start = n; // the new node becomes the first node

答案 1 :(得分:0)

类Node显示列表中有一些名为nodes的项。这些项目跟踪当前节点(下一个和上一个)之前和之后的项目。 Linked类为列表的开头和结尾创建一个Node对象,并且有两个方法:append将在当前节点之后添加一个整数v,并且prepend将在当前节点之前向节点添加一个整数。

答案 2 :(得分:0)

您将创建一个位于列表尾部end之后的新节点。

end.next = n;

同样,由于它是双重关联的,n现在会有一个上一个节点end

n.previous = end;

最后,由于新节点现在是列表的尾部,我们将其分配给end

end = n;

Prepend遵循类似的逻辑。前一个头start将在新节点之后出现。

n.next = start;

由于它是双向链接的,start需要知道前一个节点是新节点。

start.previous = n;

最后,我们的新节点是新的节目。

start = n;

答案 3 :(得分:0)

想象一下,如果你有一个链条,链条的每个部分(节点)只知道它前面的那个和它背后的那个。 所以,现在我想将新的部分(节点)附加到链的末尾,我们称之为 N
A - &gt; B - &gt; C ===&gt; A - &gt; B - &gt; C - &gt; N.
为了正确插入 N ,我需要 N 来了解 C C 知道 N 就在它面前。所以,现在我将更新c.next或您的end.next更新为 N n.previous即将结束。现在我的新结局是 N 而不是 C

同样的事情开始。

A - &gt; B ==&gt; N - >; A - &gt;乙 我们会更新 A N 并开始。