LC-合并两个有序链表(解法1)
链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/
描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
思路:这题不是很难,我们可以新建个链表,然后遍历两个链表,将他们的值进行比较,小的就添加进新链表,然后后移一位,再进行比较。以例1为例,我们先将l1的1和l2的1比较,相等就将l1的1添加进新链表,然后后移,将l1的2与l2的1比较,l2的值小,将1添加进新链表,然后后移一位,下面就比较l1的2和l2的3,以此类推。
代码如下:
public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//如果其中一个链表为空,返回另外一个链表即可
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
//新建一个链表
ListNode result = new ListNode();
//新建个头节点,方便返回
ListNode head = result;
//循环条件是两个都不为null,否则循环里的.val会报空指针
while (list1 != null && list2 != null) {
//如果list1的值小于或等于list2的值,就将list1的节点加入新链表,并将指针后移一位,反之将list2的节点加入新链表
if (list1.val <= list2.val) {
result.next = list1;
list1 = list1.next;
} else {
result.next = list2;
list2 = list2.next;
}
result = result.next;
}
//当一个链表走完了,就将另外一个链表加入新链表就行
if (list1 == null) {
result.next = list2;
}
if (list2 == null) {
result.next = list1;
}
//注意:此处返回的是头节点下一个节点
return head.next;
}