[剑指Offer] 16.合并两个排序链表
Posted NULL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指Offer] 16.合并两个排序链表相关的知识,希望对你有一定的参考价值。
【思路1】递归
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 else if(pHead2 == NULL) 16 return pHead1; 17 ListNode* res = NULL; 18 if(pHead1->val <= pHead2->val){ 19 res = pHead1; 20 res->next = Merge(pHead1->next, pHead2); 21 }else{ 22 res = pHead2; 23 res->next = Merge(pHead1,pHead2->next); 24 } 25 return res; 26 } 27 };
【思路2】非递归,新建一个链表并保存头结点,将原来两个链表进行比较按顺序插入到新链表中,最后将有剩余的链表直接接上。
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) 13 return pHead2; 14 else if(pHead2 == NULL) 15 return pHead1; 16 ListNode* res = NULL; 17 ListNode* cur = NULL; 18 while(pHead1 != NULL && pHead2 != NULL){ 19 if(pHead1->val <= pHead2->val){ 20 if(res == NULL) 21 res = cur = pHead1; 22 else{ 23 cur->next = pHead1; 24 cur = cur->next; 25 } 26 pHead1 = pHead1->next; 27 }else{ 28 if(res == NULL) 29 res = cur = pHead2; 30 else{ 31 cur->next = pHead2; 32 cur = cur->next; 33 } 34 pHead2 = pHead2->next; 35 } 36 } 37 if(pHead1 == NULL){ 38 cur->next = pHead2; 39 } 40 if(pHead2 == NULL){ 41 cur->next = pHead1; 42 } 43 return res; 44 } 45 };
以上是关于[剑指Offer] 16.合并两个排序链表的主要内容,如果未能解决你的问题,请参考以下文章