如何实现双向链表的插入和删除操作?

摘要:LinkedList 是 Java 中的一个双向链表实现,它实现了 List、Deque(双端队列)、Queue 等接口,因此可以作为列表、栈或队列使用。为了方便后续使用,在这里对其插入和删除方法进行对比。 示例代码 import java
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。