Java 跳过M个元素并从LinkedList中删除N个元素,跳过0会引发问题

Java 跳过M个元素并从LinkedList中删除N个元素,跳过0会引发问题,java,data-structures,linked-list,Java,Data Structures,Linked List,我的算法- 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;

我的算法-

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;
}
private static MyList skip$DeleteItem(MyList L,int M,int N){
MyList curr=L;
MyList-prev=null;
while(curr!=null){
int计数器=0;
而(curr!=null&&计数器34-->8-->7-->5-->4-->6-->3-->1-->2-->尾部

输出-9-->34-->尾部

应为-NULL(因为所有元素都应删除)

解决方案是

while(curr != null && counter < N){     
                curr = curr.next;
                if(prev == null){                   
                    curr = curr.next;
                    L = curr;
                }
                else{               
                prev.next = curr;
                }               
                counter ++;
            }
while(curr!=null&&counter
您的“跳过”部分似乎正常,但删除部分有问题

while(curr != null && counter < N){
        curr = curr.next;
        if(prev == null){                   
            prev = curr;
        }
        else{               
        prev.next = curr;
        }               
        counter ++;
    }
while(curr!=null&&counter
在第一次迭代中,首先将curr指针前进到下一个元素,然后,
if(prev==null)
将prev前进到同一个curr

因此,在您的示例中,在第一次迭代结束时,curr和prev都指向34。 从那时起,列表的其余部分将被正确删除