2016-05-01 6 views
0

私はLinkedListLinkedListのコード)を持っていて、その中にcharが入っています。これは完全なリストです:['a','b','I','d','R','A','7','p']LinkedListから「links」を削除しますか?

大文字ではないすべての文字を削除するメソッドを作成しようとしています。メソッドを実行した後、LinkedList['I','R','A']のようになります。

私のコードを実行した後、私はreturnと同じリストを得ました。このリストは['a','b','I','d','R','A','7','p']です。ここで

は方法のための私のコードです:ここでは

public static ListNode copyUpperCase(ListNode head) { 

    ListNode ptr = head; 
    while(!isEmpty(ptr.next)){ 
     if(!Character.isUpperCase(ptr.element)){ 
      ptr = ptr.next.next; 
      //System.out.println(ptr.element); 
     } 
     ptr = ptr.next; 
    } 
    return head; 
} 

isEmpty()です:ここでは

public static boolean isEmpty(ListNode l) { 
    if (l == null) 
     throw new ListsException("Lists: null passed to isEmpty"); 
    return l.next == null; 
} 

ListNodeです:

public class ListNode { 
    public char element; 
    public ListNode next; 
} 

私は検索部が機能していることがわかりますしかし、私はノードの部分を削除する権利、任意の提案を得ることができないのですか?あなただけの要素への代入を逃したので、

答えて

2
public static ListNode copyUpperCase(ListNode head) { 
    ListNode ptr = head; 
    while(!isEmpty(ptr.next)){ 
     if(!Character.isUpperCase(ptr.element)){ 
      ptr.next = ptr.next.next; 
      //System.out.println(ptr.element); 
     } 
     ptr = ptr.next; 
    } 
    return head; 
} 

あなたが「CHANGE」リストに必要ではない、これは単に次の要素に割り当てるように、このコードは、しかし、動作しません

ローカル変数、次の要素がactully良いものですし、その1

編集にスキップした場合に見もせず:完全に動作するコード

class ListNode { 

    public ListNode(char element,ListNode next) { 
     this.element = element; 
     this.next = next; 
    } 

    public char element; 
    public ListNode next; 

    void print() { 
     System.out.print(this.element+","); 
     if(this.next != null) { 
      this.next.print(); 
     } 
     else { 
      System.out.println(""); 
     } 

    } 

} 
public class main { 


    //Imo you should only check if this elem is a null one, as a null means empty, a null on next only means that it's the last elem, but will still contain data 
    public static boolean isEmpty(ListNode l) { 
     return l == null; 
    } 

    public static ListNode getNextUpper(ListNode head) { 
     while(!isEmpty(head)){ 
      if(Character.isUpperCase(head.element)) { 
       return head; 
      } 
      head = head.next; 
     } 
     return null; 
    } 

    public static ListNode copyUpperCase(ListNode head) { 
     ListNode newhead = getNextUpper(head); 
     ListNode temp = newhead; 
     while(!isEmpty(temp)){ 
      temp.next = getNextUpper(temp.next); 
      temp = temp.next; 
     } 
     return newhead; 
    } 

    public static void main(String[] args) { 
     ListNode t = new ListNode('a' , new ListNode('b' , new ListNode('I', new ListNode('d', new ListNode('R', new ListNode('A', new ListNode('7', new ListNode('p',null)))))))); 

     t.print(); 

     ListNode newt = copyUpperCase(t); 

     newt.print(); 
    } 

} 
+0

を私はそれを動作させることはできません、それは例外をスローし、このラインで "nullが渡された":しばらく(!のisEmpty(TEMP)){copperUpperCase方法で: ( – Carlton

+0

私のコードでisEmptyを変更しましたが、そのコードを使用していますか? – user3252497

+0

これを試しましたが、まだ "java.lang.NullPointerException"があり、isEmpty()メソッドを変更することはできません。あなたは例外をどうやって得られないかについての提案はありますか?私は試しましたが、結果はうんざりです。 – Carlton

1

ptrローカルVARですしたがって、

ptr = ptr.next.next; 

あなたのリンクリストは変更されません。

代わりにptr.nextを変更する必要があります。それ以外にもheadを修正する必要があります。オリジナルのheadは大文字ではありません。このような

何か作業をする必要があります:

// find the first valid (upper case) element and set head to refer to it 
while (!Character.isUpperCase(head.element) && head != null) 
    head = head.next; 
ListNode ptr = head; 
if (ptr != null) 
    // eliminate all non-upper case elements 
    while(!isEmpty(ptr.next)){ 
     if(!Character.isUpperCase(ptr.next.element)){ 
      ptr.next = ptr.next.next; 
     } 
     ptr = ptr.next; 
    } 
} 
return head; 
+0

私はそれを試しました。結果は['R'、 'A'、 'p']です。最初の大文字をスキップし、最後の文字を削除しません。コードを修正して機能させようとします。 – Carlton

+0

「nullリストが渡されました」として例外エラーが発生しましたが、while(!isEmpty(ptr.next))を「while(!isEmpty(ptr))」に変更しましたが、 A '、' p ']という結果になります。 – Carlton

関連する問題