劍指offer25--合併兩個排序的連結串列
阿新 • • 發佈:2018-12-31
題目描述
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
思路:
- 判斷空
- 頭節點需要判斷,
- 然後讓頭節點一個一個吞噬連結串列。
比較麻煩
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL||pHead2==NULL) return pHead1==NULL?pHead2:pHead1; ListNode* tmp1=pHead1; ListNode* tmp2=pHead2; ListNode* front(0); ListNode* refront(0); if(tmp1->val>tmp2->val){ front=tmp2; refront=front; tmp2=tmp2->next; }else{ front=tmp1; refront=front; tmp1=tmp1->next; } while(tmp1!=NULL&&tmp2!=NULL) { if(tmp1->val>tmp2->val){ ListNode* tmp=tmp2; tmp2=tmp2->next; front->next=tmp; front=front->next; }else{ ListNode* tmp=tmp1; tmp1=tmp1->next; front->next=tmp; front=front->next; } } while(tmp1!=NULL){ front->next=tmp1; tmp1=tmp1->next; } while(tmp2!=NULL){ front->next=tmp2; tmp2=tmp2->next; } return refront; } };
劍指offer解法:
遞迴的解法比較好用
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL) return pHead2; else if(pHead2==NULL) return pHead1; ListNode* tmp(0); if(pHead1->val>pHead2->val) { tmp=pHead2; tmp->next=Merge(pHead1,pHead2->next); }else{ tmp=pHead1; tmp->next=Merge(pHead1->next,pHead2); } return tmp; } };