合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
思路:
双指针,大体流程:
- 利用两个指针分别指向两个链表,并比较两指针指向的值,小值的node连接至新链表中同时改变指针指向成小值的next。直到有链表遍历完
- 将剩下为遍历完的链表与新链表连接
代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (!list1)
return list2;
if (!list2)
return list1;
ListNode *p1 = list1, *p2 = list2;
ListNode *root = nullptr, *cur;
while (p1 && p2) {
if (p1->val < p2->val) {
if (!root) {
root = p1;
cur = root;
} else {
cur->next = p1;
cur = cur->next;
}
p1 = p1->next;
} else {
if (!root) {
root = p2;
cur = root;
} else {
cur->next = p2;
cur = cur->next;
}
p2 = p2->next;
}
}
if (p1) {
cur->next = p1;
}
if (p2) {
cur->next = p2;
}
return root;
}
};