删除索引N LinkedList处的元素



这是作业

我被要求从LinkedList中删除第k个元素。我还得到了它的尺寸int N。问题是,在删除位置"k"的节点后,我如何更新列表的大小?如果我的代码中的逻辑有问题,请提及。

我不希望解决方案只是指导,谢谢。

int N;               
Node first;         
// delete the kth element (where k is between 0 and N-1 inclusive)
public void delete (int k) {
    if (k < 0 || k >= N)
        throw new IllegalArgumentException();
    Node x = first;
    if( k == 0){
        first = x.next;
        N = N - 1;
    }
    for(int i = 1; i < k; i++){
        x = x.next;
        N = N - 1;
    }
    x.next = x.next.next;
    N = N - 2;
}

我想我的列表大小(int N(可能有问题。

删除节点时,只需将上一个Nodenext更改为k中的(新的(下一个节点,并递减N(N--(即可更新列表大小。

编辑

还要注意for循环,您正在更改节点k 之前的下一个所有节点

考虑两种情况:k=0和其余情况。大小由N给出,所以新的大小应该是N-1。

Node x = first; // What a name
if (k == 0) {
    first = x.next; // Could be first = first.next
    N = N - 1;
    // Are you done here?
}
for (int i = 1; i < k; i++) {
    x = x.next;
    // Really? N = N - 1;
}
x.next = x.next.next;
// Really? N = N - 2;
N = N - 1;

尝试使用LinkedList中定义的list.remove(Object obj)方法。要获取第k个元素处的对象,可以使用list.get(int index)。一旦找到第k个元素,请考虑中断或返回,以避免任何并发的修改问题或与索引相关的错误。

相关内容

  • 没有找到相关文章

最新更新