删除索引N,LinkedList处的元素

时间:2016-10-09 20:37:38

标签: java list linked-list nodes

这是家庭作业

我被要求从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)上做错了。

3 个答案:

答案 0 :(得分:2)

删除节点时,您只需将之前的Node next更改为k中的(新)下一个节点,然后递减NN-- )更新列表大小。

修改

还要注意你的for循环,你正在更改节点k

之前的所有节点

答案 1 :(得分:0)

考虑制作两种情况: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;

答案 2 :(得分:0)

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