class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr) return list2;
if (list2 == nullptr) return list1;
ListNode* p = nullptr;
if (list1->val < list2->val) {
p = list1;
list1 = list1->next;
} else {
p = list2;
list2 = list2->next;
}
ListNode* tail = p;
tail->next = nullptr;
while(true) {
if (list1 == nullptr) {
tail->next = list2;
break;
}
if (list2 == nullptr) {
tail->next = list1;
break;
}
if (list1->val < list2->val) {
tail->next = list1;
tail = tail->next;
list1 = list1->next;
tail->next = nullptr;
} else {
tail->next = list2;
tail = tail->next;
list2 = list2->next;
tail->next = nullptr;
}
}
return p;
}
};
这是我写的, 感觉不太简洁
下面这个是官方的:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
// 合并后 l1 和 l2 最多只有一个还未被合并完, 我们直接将链表末尾指向未合并完的链表即可
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
来源: 力扣 (LeetCode)
著作权归作者所有. 商业转载请联系作者获得授权, 非商业转载请注明出处.
本文链接地址:21. 合并两个有序链表,英雄不问来路,转载请注明出处,谢谢。
有话想说:那就赶紧去给我留言吧。
文章评论