双向链表 LinkedList 的插入和删除
LinkedList 是 Java 中的一个双向链表实现,它实现了 List、Deque(双端队列)、Queue 等接口,因此可以作为列表、栈或队列使用。为了方便后续使用,在这里对其插入和删除方法进行对比。
示例代码
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
// 创建一个新的 LinkedList 实例
LinkedList<String> linkedList = new LinkedList<>();
// 尾插(在列表末尾添加元素)
linkedList.add("Tail1"); // 使用 add 方法进行尾插
linkedList.offer("Tail2"); // offer 方法也是将元素插入到队列(列表)的末尾
System.out.println("After tail insert: " + linkedList);
// 输出:[Tail1, Tail2]
// 说明:此时列表中包含两个元素 "Tail1" 和 "Tail2" 按顺序从头到尾排列
// 头插(在列表开头添加元素)
linkedList.addFirst("Head1"); // 使用 addFirst 方法在列表头部添加元素
linkedList.offerFirst("Head2"); // offerFirst 方法同样可以在列表头部添加元素
System.out.println("After head insert: " + linkedList);
// 输出:[Head2, Head1, Tail1, Tail2]
// 说明:新添加的元素 "Head2" 和 "Head1" 分别被插入到了列表的最前面
// 尾删(从列表末尾删除元素)
// 使用 pollLast 方法移除并返回列表最后一个元素,如果列表为空则返回 null
String removedTailPoll = linkedList.pollLast();
System.out.println("Removed from tail using pollLast: " + removedTailPoll);
// 输出:Removed from tail using pollLast: Tail2
// 说明:从列表末尾移除了 "Tail2"
System.out.println("After tail remove with pollLast: " + linkedList);
// 输出:[Head2, Head1, Tail1]
// 使用 removeLast 方法移除并返回列表最后一个元素,如果列表为空则抛出 NoSuchElementException
try {
String removedTailRemove = linkedList.removeLast();
System.out.println("Removed from tail using removeLast: " + removedTailRemove);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
// 输出:Removed from tail using removeLast: Tail1
// 说明:从列表末尾移除了 "Tail1"
System.out.println("After tail remove with removeLast: " + linkedList);
// 输出:[Head2, Head1]
// 头删(从列表开头删除元素)
// 使用 poll 方法移除并返回列表第一个元素,如果列表为空则返回 null
String removedHeadPoll = linkedList.poll();
System.out.println("Removed from head using poll: " + removedHeadPoll);
// 输出:Removed from head using poll: Head2
// 说明:从列表开头移除了 "Head2"
System.out.println("After head remove with poll: " + linkedList);
// 输出:[Head1]
// 使用 remove 方法移除并返回列表第一个元素,如果列表为空则抛出 NoSuchElementException
try {
String removedHeadRemove = linkedList.remove();
System.out.println("Removed from head using remove: " + removedHeadRemove);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
// 输出:Removed from head using remove: Head1
// 说明:从列表开头移除了 "Head1"
System.out.println("After head remove with remove: " + linkedList);
// 输出:[]
}
}
方法对比
add() vs offer():
add() 和 offer() 都用于在列表末尾添加元素。区别在于当超出容量限制时(对于有界队列),add() 会抛出异常,而 offer() 返回 false。
addFirst() vs offerFirst():
这两种方法都是在列表的开头添加元素。addFirst() 在无法添加元素时可能会抛出异常(取决于具体实现),而 offerFirst() 则不会抛出异常,而是返回一个布尔值表示操作是否成功。
pollLast() vs removeLast():
pollLast() 试图移除并返回列表的最后一个元素,如果列表为空,则返回 null。
removeLast() 同样尝试移除并返回列表的最后一个元素,但如果列表为空,它会抛出 NoSuchElementException。
poll() vs remove():
poll() 移除并返回列表的第一个元素,如果列表为空,则返回 null。
remove() 移除并返回列表的第一个元素,但如果列表为空,它会抛出 NoSuchElementException。

浙公网安备 33010602011771号