劍指offer 16:合併兩個有序連結串列
阿新 • • 發佈:2018-12-30
遞迴實現
#include <iostream> using namespace std; struct ListNode { public: int val; struct ListNode *next; }; class Solution { public: // 16 合併兩個有序連結串列 //遞迴實現 ListNode* Merge(ListNode *pLeft, ListNode *pRight) { if (pLeft == NULL) { return pRight; } else if (pRight == NULL) { return pLeft; } ListNode *head = NULL; if (pLeft->val < pRight->val) { head = pLeft; head->next = Merge(pLeft->next, pRight); } else { head = pRight; head->next = Merge(pLeft, pRight->next); return head; } } }; int main() { ListNode list[4]; list[0].val = 1; list[0].next = &list[1]; list[1].val = 2; list[1].next = &list[2]; list[2].val = 3; list[2].next = &list[3]; list[3].val = 4; list[3].next = NULL; ListNode left; left.val = 5; left.next = NULL; Solution solu; ListNode *head = solu.Merge(&left,list); while (head != NULL) { cout << head->val << endl; head = head->next; } return 0; }