劍指offer 面試題25 合併兩個排序的鏈表

題目描述
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。

類似於歸併排序的歸併過程,思路是每次在鏈表的尾部插入較小的元素。
也可以考慮用遞歸的方法寫,比較簡便。

#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include<cmath>
#include<stack>
#include<algorithm>
using namespace std;

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};

class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        ListNode* res;
        ListNode* tail=new ListNode(-1);
        res=tail;
        while (pHead1!=NULL&&pHead2!=NULL)
        {
            if(pHead1->val<pHead2->val) {
                ListNode* temp=new ListNode(pHead1->val);
                pHead1=pHead1->next;
                tail->next=temp;
                tail=tail->next;
            } else {
                ListNode* temp=new ListNode(pHead2->val);
                pHead2=pHead2->next;
                tail->next=temp;
                tail=tail->next;
            }
        }
        if(pHead1!=NULL) {
            tail->next=pHead1;
        }
        if(pHead2!=NULL) {
            tail->next=pHead2;
        }
        return res->next;
    }
};

int main() {
    Solution sol;
    ListNode* test1=new ListNode(2);
    test1->next=new ListNode(4);
    ListNode* test2=new ListNode(1);
    test2->next=new ListNode(3);
    ListNode* res=sol.Merge(test1,NULL);

    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章