题目描述
给出两个排好序的单向链表,返回合并排序后新的单向链表
思路
新建 哨兵节点 dummy 然后进行先行合并即可。
新建头部的保护结点 dummy,设置 cur 指针指向 dummy。
若当前 l1 指针指向的结点的值 val 比 l2 指针指向的结点的值 val 小,则令 cur 的 next 指针指向 l1,且 l1 后移;否则指向 l2,且 l2 后移。
然后 cur 指针按照上一部设置好的位置后移。
循环以上步骤直到 l1 或 l2 为空。
将剩余的 l1 或 l2 接到 cur 指针后边。
代码实现
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 开哨兵节点
ListNode *dummy = new ListNode(0);
ListNode *cur = dummy;
// 开始线性合并
while (l1 != NULL && l2 != NULL) {
if (l1 -> val < l2 -> val) {
cur -> next = l1;
l1 = l1 -> next;
}
else {
cur -> next = l2;
l2 = l2 -> next;
}
cur = cur -> next;
}
cur -> next = (l1 != NULL ? l1 : l2); // 如果 其中有一个链表空了
return dummy -> next;
```}
};
题目进阶
TODO
leetcode 23 合并K个有序链表
leetcode 1669 合并两个链表