剑指Offer-合并两个排序的链表
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
1.判断两个链表是否为空,若其中一个链表为空,则直接返回另一个链表。
2.新建一个节点作为合并后的链表头部,最后返回时需要返回该头部的下一个节点。
3.当两个链表均不为空时,按照数字大小依次插入到新链表中。
4.当其中一个链表为空时,将另一个链表的后续元素全部插入到新链表中。
代码:
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 { 13 if(pHead1 == NULL) 14 return pHead2; 15 16 if(pHead2 == NULL) 17 return pHead1; 18 19 ListNode *newhead = new ListNode(0); 20 ListNode *current = newhead; 21 while(pHead1 != NULL && pHead2 != NULL){ 22 if(pHead1 -> val <= pHead2 ->val){ 23 current->next = pHead1; 24 current = current->next; 25 pHead1 = pHead1->next; 26 }else{ 27 current->next = pHead2; 28 current = current->next; 29 pHead2 = pHead2->next; 30 } 31 } 32 if(pHead1 != NULL){ 33 current -> next = pHead1; 34 }else if(pHead2 != NULL){ 35 current ->next = pHead2; 36 } 37 return newhead->next; 38 } 39 };