题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
分析:苦力活,使用两个指针分别指向未被合并的两个链表的首部,比较两个首部数值的大小,合并数值小的结点,并且指针后移指向新的首部。
最后到了某一个链表的尾部之后,将尾部连接另一链表未被合并部分的首部。
代码:1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution {10 public:11 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {12 if(pHead1 == NULL) return pHead2;13 if(pHead2 == NULL) return pHead1;14 ListNode* r = NULL;15 if(pHead1->val < pHead2->val) {16 r = pHead1;17 pHead1 = pHead1->next;18 } else {19 r = pHead2;20 pHead2 = pHead2->next;21 }22 ListNode* p = r;23 while(pHead1 || pHead2) {24 if(pHead1 == NULL) {25 p->next = pHead2;26 break;27 }28 if(pHead2 == NULL) {29 p->next = pHead1;30 break;31 }32 if(pHead1->val >= pHead2->val) {33 p->next = pHead2;34 p = p->next;35 pHead2 = pHead2->next;36 } else {37 p->next = pHead1;38 p = p->next;39 pHead1 = pHead1->next;40 }41 }42 return r;43 }44 };