题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路
代码一
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummyHead = new ListNode( 0 );
ListNode* p = dummyHead;
while ( l1 && l2 ) {
if ( l1->val < l2->val ) {
p->next = l1;
l1 = l1->next;
}
else {
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
p->next = l1 ? l1 : l2;
return dummyHead->next;
}
};
代码二
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummyHead = new ListNode( 0 );
ListNode* p = dummyHead;
while ( l1 && l2 ) {
ListNode* temp = l1;
ListNode* pre = nullptr;
while ( l1 && l1->val <= l2->val ) {
pre = l1;
l1 = l1->next;
}
p->next = temp;
if ( pre ) // 如果pre为null,说明l1第一个元素小于l2第一个元素。
p = pre;
temp = l1;
l1 = l2;
l2 = temp;
}
p->next = l1 ? l1 : l2;
return dummyHead->next;
}
};