0

ターゲット値と等しい単一リンク リスト内のすべてのインスタンスを削除する再帰メソッドを定義しようとしています。remove メソッドとそれに付随する removeAux メソッドを定義しました。頭を削除する必要がある場合に頭も再割り当てされるようにするには、どうすればこれを変更できますか? これが私がこれまでに持っているものです:

public class LinkedList<T extends Comparable<T>> {

private class Node {
    private T data;
    private Node next;

    private Node(T data) {
        this.data = data;
        next = null;
    }
}

private Node head;

public LinkedList() {
    head = null;
}

public void remove(T target) {
    if (head == null) {
        return;
    }

    while (target.compareTo(head.data) == 0) {
        head = head.next;
    }

    removeAux(target, head, null);
}

public void removeAux(T target, Node current, Node previous) {
    if (target.compareTo(current.data) == 0) {
        if (previous == null) {
            head = current.next;
        } else {
            previous.next = current.next;
        }
        current = current.next;
        removeAux(target, current, previous); // previous doesn't change

    } else {
        removeAux(target, current.next, current);
    }
}
4

2 に答える 2

0

このような前のものを次のものに切り替えるために削除するときに、前のものへの参照を渡すことを好みます

public void remove(T target){
   removeAux(target,head, null);
}


public void removeAux(T target, Node current, Node previous) {
      //case base
       if(current == null)
               return;

    if (target.compareTo(current.data) == 0) {

        if (previous == null) {
          // is the head
            head = current.next;
        } else {
            //is not the head
            previous.next = current.next;
        }
        current = current.next;
        removeAux(target, current, previous); // previous doesn't change

    } else {
        removeAux(target, current.next, current);
    }
}

この回答を確認してくださいグラフィカルにリンクされたリストは、実装方法を考えるのに役立つ場合があります。これがトレーニングに適している場合は、反復的に行うことができます。

于 2013-07-01T23:44:20.143 に答える