2

リンク リスト ノードの操作を練習していて、答え方がわからない問題に遭遇しました。リンクされたリストの最後のノードを削除するにはどうすればよいですか。以下のコードは、最後のノードのすべてのエントリのバーに対して機能します。最後は削除されません。

ノード クラス

public class Node {

    private String data;
    private Node next;

    Node(String data, Node next)
    {
        this.data = data;
        this.next = next;
    }

    public void setData(String d)
    {
        data = d;
    }

    public void setNext(Node n)
    {
        next = n;
    }

    public String getData()
    {
        return data;
    }

    public Node getNext()
    {
        return next;
    }

主要

Node list = new Node("NODE 1",new Node("NODE 2",new Node("NODE 3", null)));
        list = insertSecond(list,"New Node");
        list = addLast(list,"LAST NODE");

        printList(list);
        System.out.println();
        deleteNode(list,"LAST NODE");
        printList(list);    
    }

    public static Node deleteNode(Node list,String str)
    {
        Node temp = list;
        Node prev = list;

        while(temp.getNext() != null)
        {
            if(temp.getData().equals(str))
            {
                if(prev.getNext() == null)
                    prev.setNext(null);
                else{
                prev.setNext(prev.getNext().getNext());
                }

            }
            prev = temp;
            temp = temp.getNext();
        }
4

15 に答える 15

5
while(temp != null){
  prev = temp;
  temp = temp.getNext();

}

prev.next = null;

これを試して:

于 2013-04-03T16:33:27.380 に答える
3

リストが開始と終了の両方を認識している、二重にリンクされたリストを使用する場合が最も簡単です。

次に、次のようなことができます。

public void removeLastItem(){
    this.lastNode = this.lastNode.prev;
}
于 2013-04-03T16:21:29.870 に答える
1

while(temp.getNext() != null)あなたの最後の要素では失敗すると思います。最後の要素には要素がありませんnext。そのため、最後の要素は渡された文字列と比較されません。これをデバッガでトレースする必要があります。

于 2013-04-03T16:21:37.193 に答える
0

これは、Java コンテナ クラス「LinkedList」を使用することで、はるかに簡単な方法で実行できます。Java のクラス LinkedList は、取得/追加/削除の First/Last メソッドをサポートする Deque (両端キュー) インターフェイスを実装します。基本的なコード スニペットは次のとおりです。

LinkedList<Integer> list = new LinkedList<Integer>();
list.addFirst(1);
list.addLast(2);
System.out.println(list.removeLast());
于 2013-12-06T13:11:30.957 に答える
0

ここでのロジックは単純で、最後のノードを取得するのと同じです。ここで注意が必要なのは、最後のノードに到達したときに、最後のノードの前のノードを記憶し、それを null に設定して、それが新しい最後のノードになるようにする必要があることです。以下のコードでは、 n2になる最後の要素に到達すると、n1を取得して null に設定します。

public void removeLast(){
    if(head==null) System.out.println("List is empty");
    else {
    Node n1 = null;
    Node n2 = head;
        while(n2.next != null)
        {
            n1 = n2;
            n2 = n2.next;
        }
        n1.next = null;
    }
于 2016-10-16T15:28:42.513 に答える
0

これは私のために働いた..

public void removeLastNode(){
    System.out.println("\n Inside removeLastNode");
    next=firstLink;
    prev=firstLink;
    if(next == null) System.out.println("\n The link List is Empty");
    while(next.getNext()!=null) { 
        prev=next;
        next=next.getNext();
    }
    prev.setNext(null);  
}
于 2015-05-16T07:33:03.883 に答える
0

これは、最後のノードの次の変数が常に null になるという前提での私の試みです。

public class LastNodeRemoval {

  private static class Node {
      String item;
      Node next;
  }

  public static void main(String[] args) {
      Node third = new Node();
      third.item = "Third";

      Node second = new Node();
      second.item = "Second";
      second.next = third;

      Node first = new Node();
      first.item = "First";
      first.next = second;

      removalLastNode(first);
   }

   private static void removalLastNode(Node first) {
      Node temp = first;

      while(temp.next.next != null) {
          temp = temp.next;
      }

      temp.next = null;

      System.out.println("Last node: "+temp.item);
   }

}
于 2013-10-30T06:54:10.747 に答える