2013-05-12 28 views
0

嗨,我想知道如何去颠倒单链表。从我到目前为止看过的例子来看,反向方法的返回类型是无效的,我需要一个具有单链表(SLL)返回类型的类型。我有一个名为Node的内部类来处理所有的节点引用。如何反向单链表 - Java

这是我到目前为止有:

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; 
} 

我得到以下编译错误:

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

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

如果你需要更多的代码来了解我的问题,只是问:)

提前感谢!

+2

本网站不是一个编码服务。如果你想真正学到东西,就自己做作业。如果您遇到困难,*带着您的代码*,请回来寻求关于特定编码问题的帮助。这个问题太广泛了,坦率地说,我们可以做的最好的事情就是不回答。 – Bohemian 2013-05-12 01:00:30

回答

1

SLL应该是一个类,它的'head'或'first'指针指向列表中的第一个节点。

如果你注定要返回一个SLL,这大概是一个 SLL与节点,从原来的反向顺序进行复制。

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只是作废。

希望这会有所帮助。

+0

感谢您的帮助! – 2013-05-12 01:11:34