【LeetCode & 剑指offer刷题】链表题7:25 合并两个排序的链表(系列)(21. Merge Two Sorted Lists)
【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)
21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input:
1->2->4, 1->3->4
Output:
1->1->2->3->4->4
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/*
联系合并两个排序的数组,temp[k++] = (a[i]<b[j])? a[i++] : b[j++]
*/
class
Solution
{
public
:
ListNode
*
mergeTwoLists
(
ListNode
*
l1
,
ListNode
*
l2
)
{
if
(
l1
==
nullptr
)
return
l2
;
if
(
l2
==
nullptr
)
return
l1
;
ListNode prehead
(
0
);
//头结点前面附加一结点(
当原链表头结点可能会变化时都可以考虑使用prehead
)
ListNode
*
p
=
&
prehead
;
//新链表结点指针
for
(;
l1
!=
nullptr
&&
l2
!=
nullptr
;
p
=
p
->
next
)
//比较l1和l2各结点大小,归并
{
if
(
l1
->
val
<
l2
->
val
)
{
p
->
next
=
l1
;
//下一个结点指向l1结点
l1
=
l1
->
next
;
}
else
{
p
->
next
=
l2
;
l2
=
l2
->
next
;
}
}
if
(
l1
!=
nullptr