有如下一个链表
删除索引为2位置的元素,也就是下图,元素2
还是同前几节一样的思路,要找到被删除节点的前一个节点,所以需要一个prev
找到2之前的元素,也就是1,prev指向元素1
此时要进行的操作就是将prev节点的next指向被删除节点的下一个节点
这里我们用delNode来表示被删除的节点,所以 prev.next = delNode.next
为了能够回收,要将,delNode对应的节点的next置为null
//删除在链表中index(从0开始计)个位置的元素,返回删除的元素
//在链表中不是一个常用的操作,练习使用
public E remove(int index){
if (index<0||index>=size){
throw new IllegalArgumentException("index不合法");
}
//prev指向的是被删除节点的前一个节点
Node prev = dummyHead;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
Node delNode = prev.next;
prev.next= delNode.next;
delNode.next= null;
size--;
return delNode.e;
}
//从链表中删除第一个元素,返回删除的元素
public E removeFirst(){
return remove(0);
}
//从链表中删除最后一个元素,返回删除的元素
public E removeLast(){
return remove(size-1);
}
测试代码:
public static void main(String[] args) {
LinkedList<Integer> linkedList = new LinkedList<>();
for (int i = 0; i < 5; i++) {
linkedList.addFirst(i);
System.out.println(linkedList);
}
linkedList.add(2,666);
System.out.println(linkedList);
linkedList.remove(2);
System.out.println(linkedList);
linkedList.removeFirst();
System.out.println(linkedList);
linkedList.removeLast();
System.out.println(linkedList);
}
结果展示: