21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
过程解析:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//暴力解法,逐一比较取最小值
//引入一个哑结点,值为-1
ListNode prehead=new ListNode(-1);
ListNode pre=prehead;
while(l1!=null&&l2!=null){
if(l1.val
结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.9 MB, 在所有 Java 提交中击败了27.68%的用户
通过测试用例:208 / 208
206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
提示:链表中节点的数目范围是 [0, 5000];-5000 <= Node.val <= 5000
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
过程解析:
方法一:迭代
class Solution {
public ListNode reverseList(ListNode head) {
ListNode s=head;
ListNode u=null;
ListNode v=null;
while(s!=null){
//记录当前节点的下一个节点
u=s.next;
//将当前节点指向v
s.next=v;
//s和v同时向右移动
v=s;
s=u;
}
return v;
}
}
结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.4 MB, 在所有 Java 提交中击败了14.29%的用户
通过测试用例:28 / 28
方法二:递归
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode rehead=reverseList(head.next);
head.next.next=head;
//注意,head的下一个节点一定要指向空
head.next=null;
return rehead;
}
}
结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.6 MB, 在所有 Java 提交中击败了5.09%的用户
通过测试用例:28 / 28



