Java中的Listnodes(初级)

时间:2014-02-22 02:46:55

标签: java

我目前是威斯康星大学麦迪逊分校的编程学生,我希望有人可以帮我完成任务。现在我们正在学习列表节点,但我不确定我是否完全掌握了这个概念。以下是问题:

根据规范完成以下方法。

// Insert a new Listnode<E> containing d after the first n Listnodes in
// chain. If n is less than 1 or bigger than the number of Listnodes in
// chain, throw IndexOutOfBoundsException.
// Precondition: chain has at least one node
//
// Examples:
//  chain: "A"           n: 1   d: "B"  chain: "A" -> "B"
//  chain: "A" -> "B"    n: 1   d: "C"  chain: "A" -> "C" -> "B"
//  chain: "A"           n: 2   d: "B"  IndexOutOfBoundsException
public static <E> void insertAfter(Listnode<E> chain, int n, E d) {

根据规范完成以下方法。

提示:考虑使用两个引用来逐步通过节点链,并仔细考虑何时推进它们。

// Remove all nodes in the chain whose data is equal to d (as determined by
// the equals() method of the E class).
// Preconditions: chain is not null and uses a header node (the first
// Listnode does not contain any data), no data in the chain after the
// header node is null, d is not null
//
// Examples (Hdr means header node):
//      chain: "Hdr"                   d: "A"  chain: "Hdr"
//      chain: "Hdr" -> "A"            d: "A"  chain: "Hdr"
//      chain: "Hdr" -> "A" -> "B"     d: "A"  chain: "Hdr" -> "B"
//      chain: "Hdr" -> "A" -> "A"     d: "A"  chain: "Hdr"
public static <E> void removeAll(Listnode<E> chain, E d) {

以下是我提出的答案:

1) public static <E> void insertAfter(Listnode<E> chain, int n, E d)
{
    int count = 0;
    Listnode<E> curr = chain;
    while (curr != null)
    {
        count++;
        curr = curr.getNext();
    }
    if (n < 1 || n > count)
        throw IndexOutOfBoundsException;
    Listnode<E> temp = chain;
    for (int x = 1; x < n; x++)
        temp = temp.getNext();
    temp.setNext(d,temp.getNext());
}

2)  public static <E> void removeAll(Listnode<E> chain, E d) 
{
    int count = 0;
    Listnode<E> curr = chain;
    while (curr != null)
    {
        count++;
        curr = curr.getNext();
    }
    Listnode<E> temp = chain;
    for (int x = 0; x < count; x++)
    {
        if (temp.getData.equals(d))
            temp.setNext(temp.getNext().getNext());
        temp = temp.getNext();
    }
}

根据我所做的笔记,这些答案应该是正确的,但我不明白一些概念。例如,为什么我们应该使用临时变量?我理解通过逐步完成链,你实际上是擦除了当前使用的节点之前的所有节点,但是使用临时变量如何解决这个问题呢?

如果我犯了任何错误,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

插入需要覆盖指针,在这种情况下指向列表中的下一个和上一个项目。如果您不使用临时变量,那么当您覆盖指向列表中项目的指针时,该项目将会丢失并且将无法恢复,至少按照您拥有它的顺序,因为订单已更改。 / p>

换句话说,它“只是有效”。 :P