这是作业
我被要求从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(可能有问题。
删除节点时,只需将上一个Node
的next
更改为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个元素,请考虑中断或返回,以避免任何并发的修改问题或与索引相关的错误。