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
Kodunuzda ne olduğunu görmek için hata ayıklayıcısını kullanmaya çalıştınız mı? –
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 –