题目:两数相加
描述
给定两个非空链表,表示两个非负整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例
示例 1:
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807
给定两个非空链表,表示两个非负整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807
给定链表的头节点 head,要求每 k 个节点一组进行翻转,返回修改后的链表。
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
解释:每 2 个节点为一组翻转,前 4 个节点分成两组(1→2、3→4),分别翻转为 2→1、4→3,剩余节点 5 保持不变。
设计实现满足 LRU(最近最少使用) 缓存约束的数据结构 LRUCache,支持以下操作:
LRUCache(int capacity):以正整数 capacity 初始化缓存容量;int get(int key):若 key 存在则返回对应值,否则返回 -1;void put(int key, int value):若 key 存在则更新值;若不存在则插入键值对,若容量超限则逐出最久未使用的键。
要求 get 和 put 操作的平均时间复杂度为 (O(1))。给定一个链表,要求两两交换其中相邻的节点,并返回交换后链表的头节点。要求不能修改节点的数值,只能通过调整节点的指针完成交换。
输入:head = [1,2,3,4]
输出:[2,1,4,3]
解释:原链表中相邻节点(1和2、3和4)两两交换,指针调整后得到新链表。
输入:head = []
输出:[]
给定一个链表,要求删除链表的倒数第 n 个结点,并返回链表的头结点。
val 和指向下一结点的指针 next。输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
解释:链表倒数第 2 个结点是 4,删除后链表变为 1→2→3→5。
给定一个链表数组,其中每个链表均为升序排列,要求将所有链表合并为一个新的升序链表并返回。
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:三个升序链表合并后,得到整体升序的新链表。
输入:lists = []
输出:[]
给定链表的头节点 head,要求将其按升序排列并返回排序后的链表。
输入:head = [4,2,1,3]
输出:[1,2,3,4]
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
给定一个包含额外 random 指针的链表,random 可指向链表中任意节点或空节点。要求构造该链表的深拷贝:新链表由全新节点组成,其 next 和 random 指针需与原链表对应节点的指针状态一致,且不能指向原链表的节点。
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
解释:新链表的节点值、next 指向、random 指向均与原链表一致,且所有节点为新创建的对象。
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null。
next 指针指向了链表中某个先前的节点,形成一个环。即从某个节点开始,你可以一直沿着 next 指针循环回到该节点。next 指针指向 null,并且遍历完链表后会到达末尾。