1

我目前在尝试理解链表时遇到了麻烦。我有一些使用节点的代码,并被要求使用迭代方法在整数参数中指定的索引位置创建一个新节点,其中存储了字符串参数。索引位置的旧节点应该跟在新插入的节点之后。

这些是字段:

  // a string that contains the full name on the filesystem of an image file.
private String imageName;

// a reference to the next ImageNode in the linked list.
private ImageNode next;

//temporary node created to start the set of nodes
private ImageNode temp = this;

这是我到目前为止编写的代码:注意 getNext() 返回下一个节点。

private void addIter(String imageFileStr, int pos) {

    int count = 0;
    while(temp.getNext() != null){
        temp = temp.getNext();
        count++;

        if(count == pos){
          temp.getNext() = ???
        }

    }
}

这是添加两个节点的正确方法吗?如果是这样,则当前仅当需要将节点添加到当前节点集的末尾时才有效。我将如何修改代码,以便它允许我在集合中间添加一个节点并让旧节点按照上面的说明跟随它(“索引位置的旧节点现在应该跟随新插入的节点。”)?

最后,我如何创建一个等于 addIter 输入的变量 (x),以便我可以设置 temp.getNext() = x?(目前在代码中用问号表示)。

4

3 回答 3

0

假设您有节点 A、B、C 并希望在 pos 3 处插入一个新节点 (D)。您需要遍历列表直到节点 2,即 B。然后将链接保存到 B 之后的节点进入一个临时变量,比如 TempC: Node TempC = B.getNext()。之后,您将 TempC 设置为要插入的节点之后的下一个节点:D.setNext(TempC)。然后在:之后设置D为下一个节点。结果集将是:BB.setNext(D)A, B, D, C

PS这里我假设第一个节点是1,而不是0。

于 2012-09-24T13:10:50.273 回答
0

如果没有看到更多的实现,就不可能完全回答这个问题,但这里有几件事:

  1. temp.getNext() = ???没有意义,您不能分配给函数调用。您将需要添加一个setNext(ImageNode node)将下一个节点设置为给定值的方法。

  2. 在您的add方法中,您需要使用输入字符串创建一个新节点(让我们调用它newNode,找到当前所在的节点pos(让我们调用它existingNode),然后您需要做几件事:

    • 设置newNode.next为当前之后的节点existingNode(或者null如果它是列表的末尾)
    • 设置existingNode.nextnewNode

这可能最终看起来像这样:

public void add(String item, int pos) {
    if (pos > length) {
         // Probably just throw an out of bounds exception
    }

    Node existingNode = head;
    for (int i = 0; i < pos; i++)
         existingNode = existingNode.getNext();

    Node newNode = new Node(item);
    newNode.setNext(existingNode.getNext());
    existingNode.setNext(newNode);
}
于 2012-09-24T13:12:59.110 回答
-1

您肯定需要创建一个新对象并将数据保存到其中。新对象必须指向您要添加它的下一个节点,然后 temp 必须指向该对象。

于 2012-09-24T13:08:41.390 回答