0

値を重複させずにリンクリストに追加したい。これは私の機能です:しかし、これは重複を除外しません。私がどこで間違っているのか考えていますか?ノードは、文字列値と次のポインタで構成されます。

public static void append( Node head, Node newNode ) {  
   Node currentNode = head;  
   while( currentNode.next != null ) { 
      if(currentNode.value.trim().equals(newNode.value.trim())) {
         return;
      }
      currentNode = currentNode.next;
   }  
   currentNode.next = newNode; 
}
4

2 に答える 2

4

最終ノードの重複をチェックしていません(jtahlbornが回答で述べたように、これを書き始めたときに削除されました...)。currentNodenull になるまで続行する必要がありますが、テール ノードとして使用できるように前のノードを覚えておく必要もあります。

これが動作することを示す短いが完全なプログラムです。厄介なパッケージアクセスフィールドなどがありますが、機能します...

class Test {
    public static void main(String[] args) {
        Node head = new Node("head");
        append(head, new Node("foo"));
        append(head, new Node("bar"));
        append(head, new Node("bar"));
        append(head, new Node("bar"));
        append(head, new Node("baz"));
        dump(head);
    }        

    public static void append(Node head, Node newNode) {
        Node currentNode = head;
        Node previousNode = null;

        while (currentNode != null) {
            previousNode = currentNode;
            if (currentNode.value.trim().equals(newNode.value.trim())) {
                return;
            }
            currentNode = currentNode.next;
        } 

        previousNode.next = newNode;        
    }

    public static void dump(Node head) {
        Node currentNode = head;

        while (currentNode != null) {
            System.out.println(currentNode.value);
            currentNode = currentNode.next;
        } 
    }
}

class Node {
    String value;
    Node next;

    Node(String value) {
        this.value = value;
    }
}
于 2012-12-01T22:37:50.587 に答える
1

最後のノードの重複をチェックすることはありません。

将来このような問題を見つける最良の方法は、フォーラムで質問するのではなく、デバッガーでコードをステップ実行することです。そうしないと、自分でコーディングする方法を学ぶことはできません。

于 2012-12-01T22:24:35.753 に答える