我的Algo -
private static MyList skip$DeleteItem(MyList L , int M , int N){
MyList curr = L;
MyList prev = null;
while(curr != null){
int counter = 0;
while(curr != null && counter <M){
prev = curr;
curr = curr.next;
counter++;
}
counter = 0;
while(curr != null && counter < N){
curr = curr.next;
if(prev == null){
prev = curr;
}
else{
prev.next = curr;
}
counter ++;
}
}
return L;
}
它适用于每个基本测试用例,但对于跳过值0和删除1失败。
输入 - 9 - > 34 - > 8 - > 7 - > 5 - > 4 - > 6 - > 3 - > 1 - > 2 - &GT; TAIL
输出 - 9 - > 34 - &gt; TAIL
预期 - NULL(应删除所有元素)
解决方案是
while(curr != null && counter < N){
curr = curr.next;
if(prev == null){
curr = curr.next;
L = curr;
}
else{
prev.next = curr;
}
counter ++;
}
答案 0 :(得分:2)
您的“跳过”部分似乎没问题,但删除部分有问题。
while(curr != null && counter < N){
curr = curr.next;
if(prev == null){
prev = curr;
}
else{
prev.next = curr;
}
counter ++;
}
在第一次迭代中,首先将curr指针前进到下一个元素,然后if(prev == null)
将prev推进到相同的curr。
因此在您的示例中,在第一次迭代结束时,curr和prev都指向34。 然后打开表格,列表的其余部分将被正确删除。