Können Sie erklären, warum nicht immer mein Code alle Werte in der verknüpften Liste entfernt, die dem gegebenen Wert in den Methodenargumenten entsprechen? Wie soll ich es beheben? Es besteht 97% der Testfälle. Ich bevorzuge es, dies zu beheben, anstatt die gesamte Methode mit den Prev/Next/Dummy-Zeigern zu ändern.Entfernen aller Werte in der verketteten Liste gleich einem gegebenen Wert
/**
* 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;
}
}
Es ist nicht diesen Testfall nicht passiert:
Input
5->6->6->null, 6
Output
5->6->null
Expected
5->null
und hier ist the problem in mehreren Details: Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5
Haben Sie versucht, den Debugger zu verwenden, um zu sehen, was mit Ihrem Code passiert? –
Ich hatte, das Problem hatte keine Ahnung, wie das zu beheben, ohne prev Zeiger zu verwenden, aber ich wollte auch das Problem mit dem gleichen Code beheben, an dem ich arbeitete! Ich wusste, dass, wenn die zu entfernenden Objekte nebeneinander sind, mein Code nicht funktioniert –