这是家庭作业
我被要求从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)上做错了。
答案 0 :(得分:2)
删除节点时,您只需将之前的Node
next
更改为k中的(新)下一个节点,然后递减N
(N--
)更新列表大小。
修改
还要注意你的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个元素后,请考虑中断或返回以避免任何并发修改问题或与索引相关的错误。