0

私は再帰スキルを向上させようとしています (または、おそらく初めて取得します:))。そのために、次のように、単一リンクリストを逆にする Java コードを書きました。

node head, prev; // head is pointing to the start of the linked list

void reverselist(node current) {
    if (current.next != null) {
        reverselist(current.next);
    }
    if (current.next == null) {
        this.head = current;
        prev = current;
    }
    else {
        prev.next = current;
        current.next = null;
        prev = current;
    }
}

このコードは正常に動作しますが、学習のために、再帰関数内の操作にグローバル変数 (ノード prev) を使用することは避けたいと考えています。では、この関数を書き直して完全に回避することはできますか? 他の最適化は大歓迎です:)

4

2 に答える 2

2

より良い実装は次のようになります。

public Node reverse(Node current)
{
 if (current== null || current.next==null) return current;
 Node nextItem = current.next;
 current.next = null;
 Node reverseRest = reverse(nextItem);
 nextItem.next = current;
 return reverseRest;
}
于 2013-06-18T14:42:06.173 に答える
0
public Linkedlist reverseList (LinkedList list) {

    Node temp = null;
    Node nextNode = list;
    while(list != null) {
        nextNode = list.next;
        list.next = temp;
        temp = list;
        list = nextNode;
    }
    return temp;
}

private class LinkedList {

    int data;
    LinkedList next;
}
于 2014-05-01T19:19:30.023 に答える