我目前是威斯康星大学麦迪逊分校的编程学生,我希望有人可以帮我完成任务。现在我们正在学习列表节点,但我不确定我是否完全掌握了这个概念。以下是问题:
根据规范完成以下方法。
// 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();
}
}
根据我所做的笔记,这些答案应该是正确的,但我不明白一些概念。例如,为什么我们应该使用临时变量?我理解通过逐步完成链,你实际上是擦除了当前使用的节点之前的所有节点,但是使用临时变量如何解决这个问题呢?
如果我犯了任何错误,请告诉我。感谢。
答案 0 :(得分:0)
插入需要覆盖指针,在这种情况下指向列表中的下一个和上一个项目。如果您不使用临时变量,那么当您覆盖指向列表中项目的指针时,该项目将会丢失并且将无法恢复,至少按照您拥有它的顺序,因为订单已更改。 / p>
换句话说,它“只是有效”。 :P