检索并删除
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<ListNode> 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传送门