1

Her zaman kodumun neden bağlı olan listedeki tüm değerleri yöntem argümanlarında belirtilen değere eşitlemediğini açıklayabilir misiniz? Nasıl düzeltmeliyim? Testislerin% 97'sini geçiyor. Prev/next/dummy işaretçileri kullanarak tüm yöntemi değiştirmekten ziyade bunu düzeltmeyi tercih ederim.Bağlantılı listedeki tüm değerlerin belirli bir değere eşit olarak kaldırılması

/** 
* 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; 
    } 
} 
Bu TestCase geçmez

:

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

ve burada daha fazla ayrıntılarda the problem var: İçinizdeki iken döngü değişim içinde Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5

+2

Kodunuzda ne olduğunu görmek için hata ayıklayıcısını kullanmaya çalıştınız mı? –

+0

Ben vardı, sorun prev işaretçisi kullanmadan bunu düzeltmek için hiçbir fikrim yoktu ama ben de üzerinde çalıştığım aynı kod ile sorunu çözmek istedim! Kaldırılacak öğeler bitişikse kodumun işe yaramayacağını biliyordum –

cevap

5

:

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; 
} 

Sürümünüz, kaldırılacak her ardışık değer çiftinin ikincisini atlayacaktır. ne yapar:

5-> 6-> 6-> boş

-tmp: 5 -> ikinci 6

-tmp ilk 6 ardından set tmp kaldırmak: 6, tmp. bir sonraki: boş -> bitmiş (bir 6 kalıntılar)

+0

Etkilendim! Teşekkürler! :) –

İlgili konular