从LinkedList跳过M元素和删除N个元素,跳过0引发问题

时间:2012-05-01 06:38:41

标签: java data-structures linked-list

我的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 ++;
            }

1 个答案:

答案 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。 然后打开表格,列表的其余部分将被正确删除。