题目
代码(首刷自解)
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* dummy = new ListNode(-1);
auto p = dummy;
while(list1 && list2) {
if(list1->val > list2->val) {
p->next = list2;
list2 = list2->next;
p = p->next;
} else {
p->next = list1;
list1 = list1->next;
p = p->next;
}
}
while(list1) {
p->next = list1;
list1 = list1->next;
p = p->next;
}
while(list2) {
p->next = list2;
list2 = list2->next;
p = p->next;
}
return dummy->next;
}
};
代码(8.7 二刷自解)
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
auto dummy = new ListNode(0);
auto p = dummy;
auto q1 = pHead1, q2 = pHead2;
while(q1 && q2) {
if(q1->val < q2->val) {
p->next = q1;
q1 = q1->next;
} else {
p->next = q2;
q2 = q2->next;
}
p = p->next;
}
while(q1) {
p->next = q1;
q1 = q1->next;
p = p->next;
}
while(q2) {
p->next = q2;
q2 = q2->next;
p = p->next;
}
return dummy->next;
}
};
GO
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
dummy := &ListNode{Val: 0}
p1, p2, q := list1, list2, dummy
for p1 != nil && p2 != nil {
if p1.Val > p2.Val {
q.Next = p2
p2 = p2.Next
} else {
q.Next = p1
p1 = p1.Next
}
q = q.Next
}
for p1 != nil {
q.Next = p1
p1 = p1.Next
q = q.Next
}
for p2 != nil {
q.Next = p2
p2 = p2.Next
q = q.Next
}
return dummy.Next
}
代码(9.1 三刷自解)
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
auto dummy = new ListNode();
auto p = dummy;
while(list1 && list2) {
if(list1->val < list2->val) {
p->next = list1;
list1 = list1->next;
} else {
p->next = list2;
list2 = list2->next;
}
p = p->next;
}
while(list1) {
p->next = list1;
list1 = list1->next;
p = p->next;
}
while(list2) {
p->next = list2;
list2 = list2->next;
p = p->next;
}
return dummy->next;
}
};