双向链表 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。

posted @ 2025-05-17 14:39  黑心老魔  阅读(48)  评论(0)    收藏  举报