2017-04-07 11 views
0

問題:リンクリスト実装を使用してスタックから要素をポップできないのはなぜですか?

もう一度要素をポップできません。 例では、スタックの上に4,3,2,1があります.3,2を削除することはできません。

誰でも私をガイドできますか?以下は

スタックの実装です:

public static void push(int data){ 
     if(head==null){ 
      Node newNode=new Node(data); 
      head=newNode; 
     }else{ 
      Node newNode1=new Node(data); 
      newNode1.next=head; 
      head=newNode1; 
    } 

    } 
    public static int pop(){ 
     if(head==null){ 
      return 0; 
     } 
     else{ 
      Node temp=head; 
      int a=temp.data; 
      temp=null; 
      return a; 
     } 
    } 
    public static void traverse(){ 
     Node temp=head; 
     while(temp!=null){ 
      System.out.println(temp.data); 
      temp=temp.next; 

     } 
    } 
+1

実際に何かを行うには、 'temp = null;'と期待していましたか? – user2357112

+2

あなたは 'head'に' temp.data'としてアクセスし、その値を返します。しかし、あなたは 'head'で何かをやったことはありませんでした... * _pshh、' temp.next() 'をhead_ *に代入しました。 – KarelG

+1

' head = temp.next'がありません。前のものを削除/削除します。 – Abubakkar

答えて

1

あなたはあなたがあなたの頭を移動するのを忘れて、あなたのポップ方法で問題

public static int pop(){ 
    if(head==null){ 
     return 0; 
    } 
    else{ 
     Node temp=head; 
     head = head.next; 
     int a=temp.data; 
     temp=null; 
     return a; 
    } 
} 

を持っています次のノード。

1

あなたはyou'rはちょうどヌルであることを頭に指し示す変数を作り、リストから要素を削除されていません。それはlinkedListを変更しません。

あなたは2つのオプションがあります。

  1. は、LinkedListのから組み込み関数を使用して、リストから要素を削除します。
  2. list.headを変更し、次の要素を指し示すようにします。ケース2では

、あなたはpopメソッドに以下を追加する必要があります。

head = head.next; 
関連する問題