如何反转单链表 - Java

时间:2013-05-12 00:55:38

标签: java singly-linked-list

您好我想知道如何撤销单链表。从我到目前为止看过的例子来看,反向方法的返回类型为void,我需要一个具有单链表(SLL)返回类型的方法。我有一个名为Node的内部类来处理所有节点引用。

这是我到目前为止所做的:

public SLL<E> reverse() {
    Node<E> first = null;
    Node<E> current = this;  // produces compilation error
    while (current != null) {
        Node<E> save = current;
        current = current.next;
        save.next = first;
        first = save;
    }
    return first;
}

我收到以下编译错误:

错误:不兼容的类型   required:myprog.SLL.Node   发现:myprog.SLL

我只是想知道在处理Node时如何返回类型为SLL的列表。我也认为我的回复陈述可能是错误的。

如果您需要更多代码来理解我的问题,请问:)

提前致谢!

1 个答案:

答案 0 :(得分:1)

SLL应该是一个类,带有指向列表中第一个节点的“head”或“first”指针。

如果您打算返回SLL,那么可能是 SLL与 new 节点,从原始节点以相反顺序复制。

public SLL<E> reverse() {
    SLL<E> result = new SLL<E>();

    // copy Nodes into new list, in reverse order.
    //
    Node<E> read = this.first;
    while (read != null) {
        // insert Copy, first;
        Node<E> copy = new Node<E>( read.getItem());
        copy.next = result.first;
        result.first = copy;
        // advance 'Read Position'.
        read = read.next;
    }

    // done.
    return result;
}

如果您正在改变原始SLL以进行原位反转(尚未检查您的代码是否适用于此),则不应返回SLL结果,只是无效。

希望这有帮助。