2013-05-12 3 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

Мне просто интересно, как я верну список с типом SLL при работе с узлом. Я также думаю, что мое заявление о возвращении может быть неправильным.

Если вам нужно больше кода, чтобы понять мой вопрос, просто спросите :)

Спасибо заранее!

+2

Этот сайт не является кодировкой. Сделайте свою собственную работу, если хотите научиться чему-то. Если вы застряли, * с кодом *, вернитесь, чтобы обратиться за помощью к конкретным проблемам с кодированием. Этот вопрос слишком широк, и, честно говоря, самое лучшее, что мы можем сделать, чтобы помочь вам, - не отвечать на него. – Bohemian

ответ

1

SLL должен быть классом с указателем «head» или «первым» для первого узла в списке.

Если вы предназначены для возвращения в 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

благодарит за помощь! –