1

私のコードでは、メソッドの引数で与えられた値に等しいリンクリストのすべての値が削除されるとは限りません。どのように修正する必要がありますか?テストケースの97%を通過します。私はprev/next/dummyポインタを使ってメソッド全体を変更するのではなく、これを修正することを好みます。リンクリスト内のすべての値を指定した値と同じにする

/** 
* Definition for singly-linked list. 
* public class ListNode { 
*  int val; 
*  ListNode next; 
*  ListNode(int x) { val = x; } 
* } 
*/ 
public class Solution { 
    /** 
    * @param head a ListNode 
    * @param val an integer 
    * @return a ListNode 
    */ 
    public ListNode removeElements(ListNode head, int val) { 
     while (head!=null && head.val==val){ 
       head = head.next; 
     } 
     ListNode tmp=head; 

     while (tmp!=null) { 
       if (tmp.next!=null && tmp.next.val== val) { 
        tmp.next=tmp.next.next; 
       } 
      tmp=tmp.next; 
     } 
     if (tmp != null) { 
      if (tmp.val == val) { 
       tmp = tmp.next; 
      } 
     } 
     return head; 
    } 
} 

それは、このテストケースに合格しない:

Input 
5->6->6->null, 6 
Output 
5->6->null 
Expected 
5->null 

、ここではより詳細でthe problemです: Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5

+2

デバッガを使用してコードの状態を確認しようとしましたか? –

+0

私が持っていた、問題はどのように前のポインタを使用せずにこの問題を解決するには思いもしませんでしたましたが、私はまた、私が働いていた同じコードで問題を解決したいです!私は私のコードは、 –

答えて

5

あなたの内側のwhileループ、変更内側:

if (tmp.next!=null && tmp.next.val== val) { 
    tmp.next=tmp.next.next; 
} 

while (tmp.next!=null && tmp.next.val== val) { 
    tmp.next=tmp.next.next; 
} 

あなたのバージョンは削除する値の連続する各対の第二をスキップします。 何の操作を行います。

5> 6> 6>ヌル

-tmp:5 - > 6最初のを削除し、2番目の6

-tmpにTMPを設定:6、TMP。次:ヌル - >完成(1人の6遺骨)

+0

を動作しません削除される項目が隣接している場合、私は感心していていることを知っていました!ありがとう! :) –

関連する問題