检索并删除
LinkedList.poll():
检索并删除此列表的头部(第一个元素)。
LinkedList.pollFirst():
检索并删除此列表的第一个元素,如果此列表为空,则返回null。
LinkedList.pollLast():
检索并删除此列表的最后一个元素,如果此列表为空,则返回null。
检索并不删除
public E peek():
检索但不删除此列表的头部(第一个元素)。
public E peekFirst():
检索但不删除此列表的第一个元素,如果此列表为空,则返回null。
public E peekLast():
检索但不删除此列表的最后一个元素,如果此列表为空,则返回null。
牛客--重排链表应用
1. 问题

2.示例
3.双端链表解决
- import java.util.Deque;
- import java.util.LinkedList;
- public class Solution {
- public void reorderList(ListNode head) {
- Deque
list = new LinkedList<>(); - ListNode cur = head;
- while (cur != null) {
- list.add(cur);
- cur = cur.next;
- }
- boolean flag = true;
- while (list.size() > 0) {
- if (flag) {
- list.pollFirst().next = list.peekLast();
- flag = false;
- } else {
- list.pollLast().next = list.peekFirst();
- flag = true;
- }
- }
- }
- }
5. 核心
list.pollFirst().next = list.peekLast();
检索并删除链表的头部节点,然后将头部的下一指向改为尾部第一个节点;
list.pollLast().next = list.peekFirst();
检索并删除链表的尾部节点,然后将尾部的下一节点指向改为头部第一个节点。
因为是双端队列中存储的是原有链表的节点,所以每次只用改变双端队列的节点指向,就会改变原链表的指向。
快速了解Deque传送门