首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java LinkedList 链表在堆栈、队列和双端队列应用的简单示例

LinkedList 很实用,但光看源码是不够的,需要我们用起来,在用的过程中深入了解它。

LinkedList实现了List<E>接口,我们可以像使用ArrayList一样,通过add(i)、add(index,i)、get(index)等一系列方法操作访问它。

LinkedList还实现了Deque双端队列接口,Deque又是Queue的子接口,我们可以像操作栈、队列一样操作它。

下面就看LinkedList在栈、队列、双端队列的应用示例。

1、栈(Stack)

栈是一种后进先出(LIFO, Last In First Out) 的数据结构。

LinkedList 通过 Deque 接口实现了栈,可以在头部进行插入和删除操作,使用 push 和 pop 方法实现栈结构,符合后进先出(FILO)原则,操作集中在链表的头部,效率高。

应用示例:

// 栈实现

LinkedList<Integer> stackList = new LinkedList<>();

// 先进,入栈操作

stackList.push(1);

stackList.push(2);

// 后进,入栈操作

stackList.push(3);

// 查看栈顶元素,后进先出

System.out.println(stackList.pop()); // 输出:3

System.out.println(stackList); // 输出:[2,1]

push入栈操作,pop出站操作。

除此之外,我们还可以用 LinkedList 的 addFirst()方法将元素插入到栈顶,用 removeFirst()方法移除栈顶元素。但是我还是觉得使用push和pop更明了一些。

2、队列 (Queue)

队列是一种先进先出(FIFO, First In First Out)的数据结构。

LinkedList 通过 Queue 接口实现了队列,支持 offer 和 poll 方法,符合先进先出(FIFO)原则,尤其适合需要频繁插入和移除头尾元素的场景。

LinkedList<Integer> queueList = new LinkedList<>();

// 先进,入队操作

queueList.offer(1);

queueList.offer(2);

// 后进

queueList.offer(3);

// 先进先出,出队操作

System.out.println(queueList.poll()); //输出: 1

System.out.println(queueList); //输出: [2, 3]

offer入队操作,poll出队操作。

在看源码的时候,发现offer方法调用了add方法,因此它和下面代码是等价的。

LinkedList<Integer> queueList1 = new LinkedList<>();

// 先进,入队操作

queueList1.add(1);

queueList1.add(2);

// 后进

queueList1.add(3);

// 先进先出,出队操作

System.out.println(queueList1.remove()); //输出: 1

System.out.println(queueList1); //输出: [2, 3]

add入队操作,remove出队操作。

除此之外,还可以使用 LinkedList 的 addLast() 方法将元素插入到队尾,用 removeFirst() 方法移除队头元素。

3、双端队列 (Deque)

双端队列是一种支持在两端插入和删除元素的数据结构,可以既当作栈来使用(在一端操作),也可以当作队列来使用(在两端操作)。

LinkedList 通过 Deque 接口实现了双端队列,可以在头尾进行插入和删除操作,适合需要灵活操作队列两端的情况。

// 双端队列

LinkedList<Integer> dequeList = new LinkedList<>();

// 从队头添加元素

dequeList.addFirst(5);

dequeList.addFirst(6);

System.out.println(dequeList); // [6, 5]

// 从队尾添加元素

dequeList.addLast(10);

dequeList.addLast(11);

System.out.println(dequeList); // [6, 5, 10, 11]

// 查看队头元素

System.out.println(dequeList.getFirst()); // 6

// 查看队尾元素

System.out.println(dequeList.getLast()); // 11

// 从队头移除元素

System.out.println(dequeList.removeFirst()); // 6

// 从队尾移除元素

System.out.println(dequeList.removeLast()); // 11

System.out.println(dequeList); // [5, 10]

addFirst 和 addLast 方法:分别在双端队列的头部和尾部添加元素。

removeFirst 和 removeLast 方法:分别从双端队列的头部和尾部移除元素。

getFirst 和 getLast 方法:分别查看队头和队尾的元素,但不移除。

LinkedList 里面的方法太多,通过示例希望我们可以快速地应用它。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OvNExBizNjZIJKnRD_H9AayA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券