Easy | 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
解题思路
设置两个指针分别指向下一个要合并节点, 然后比较其值, 将其较小值接入新链表。并且可以引入一个哑节点统一操作。
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null | l2 == null) {
// 如果有链表为空, 则返回另一个链表
return l1 == null ? l2 : l1;
}
ListNode cur1 = l1, cur2 = l2;
// 建一个哑节点, 用于统一操作
ListNode head = new ListNode(0);
ListNode pre = head;
while(cur1 != null && cur2 != null) {
if (cur1.val < cur2.val) {
pre.next = cur1;
cur1 = cur1.next;
} else {
pre.next = cur2;
cur2 = cur2.next;
}
pre = pre.next;
}
// 跳出循环时, 必定有一个链表为空,然后将另外一个链表接在后边
pre.next = (cur1 != null) ? cur1 : cur2;
return head.next;
}