0

こんばんは

自分で単一のリンクリストを実装しようとしていますが、検索メソッドを作成したいときに問題が発生しました。明らかに、ノード(特定の場所にノードを挿入するために使用される)を検索する場合は、適切な場所に到達したかどうかを確認するためにいくつかの値を評価する必要があります。私のノードには識別子としてデータフィールドしかないことを考えると、それを使用する以外の方法はありません。ただし、データフィールドは一意ではないため、複数のノードが適格である可能性があります。

次のリストについて考えてみます。5、7、2、8、3、1、6、5、8、4、2。リストのどこかにノードを追加したい場合(たとえば、値が8のノードの後)、次のようになります。リストを調べて、「8」が最初に出現した後に新しいノードを追加します。2nd 8の後に挿入したい場合はどうすればよいですか?

これは、単一のリンクリストでも可能ですか?

それ以外に、「removeLast()」メソッドについてフィードバックをもらいたいのですが、これは私が望んでいることを実行していないようです(リストから最後のノードを削除します)。リストの値が1つしかない場合、コードが機能しないことはわかっています。最後のノードを削除する一般的なコードが機能したらすぐに調べます。

私のコードはここにあります。

コードで編集:

 public class SingleLinkedList {

 public void deleteLast() {
    if (lastNode != null) {
        Node currentNode = firstNode;

        while (currentNode != null) {
            Node nextNode = currentNode.getNextNode();
            Node nextNextNode = nextNode.getNextNode();

            if (nextNextNode == null) {
                nextNextNode = null;
                lastNode = nextNode;
            }
        }
        listSize--;
    }
}

}

4

2 に答える 2

3

確かにそれは可能です-あなたはあなたが途中で渡したオブジェクトの数を追跡する必要があります、そしてあなたが渡した後、あなたはn求められたものと等しいオブジェクトに等しい-新しいデータを挿入します:

public void addAfterNth(Object data,Object o, int n) { 
    Node curr = firstNode;
    while (curr != null) { 
        if (curr.data.equals(o)) n--;
        if (n == 0) { 
            Node newNode = new Node(data,curr.nextNode);
            curr.setNext(newNode);
            break;
        }
        curr = curr.getNextNode();
    }
}

ここでは、データが。に等しいノードが3回検出されたdata後、パラメータで示されたデータを使用して新しいノードを挿入します。no

実行:

SingleLinkedList list = new SingleLinkedList();
list.addLast(5);
list.addLast(7);
list.addLast(2);
list.addLast(8);
list.addLast(3);
list.addLast(1);
list.addLast(6);
list.addLast(5);
list.addLast(8);
list.addLast(4);
list.addLast(2);
list.drawList();
list.addAfterNth(999,8, 2);
System.out.println("");
list.drawList();

収量(予想通り):

5, 7, 2, 8, 3, 1, 6, 5, 8, 4, 2, 
5, 7, 2, 8, 3, 1, 6, 5, 8, 999, 4, 2, 
于 2012-12-03T08:05:20.890 に答える
1

LLの最後のコードを削除するための擬似コードは次のとおりです。上記の答えは、特定の位置に挿入するというあなたの質問に正しく答えます。

if (START == NULL){
    Print: Linked-List is empty.
}
else{
    PTR = START, PREV = START
    while (PTR->LINK != NULL)enter code here
        PREV = PTR //Assign PTR to PREV
    PTR = PTR->LINK //Move PTR to next node

    ITEM = PTR->INFO //Assign INFO of last node to ITEM
    If (START->LINK == NULL) Then //If only one node is left
        START = NULL //Assign NULL to START
    Else
        PREV->LINK = NULL //Assign NULL to link field of second last node

    Delete PTR
}
于 2012-12-03T08:53:15.187 に答える