剑指offer:合并两个排序的链表

来源:互联网 发布:java 除夕节判断 编辑:程序博客网 时间:2024/04/30 00:56
#include <iostream>#include <stdio.h>#include <malloc.h>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)    {        if(pHead1 == NULL)            return pHead2;        else if(pHead2 == NULL)            return pHead1;        ListNode * res = NULL;        ListNode * tmp = NULL;        while(pHead1 && pHead2)        {            if(pHead1->val > pHead2->val)            {                if(res == NULL)                    res = tmp = pHead2;                else                {                    res->next = pHead2;                    res = res->next;                }                pHead2 = pHead2->next;            }            else            {                if(res == NULL)                    res = tmp = pHead1;                else                {                    res->next = pHead1;                    res = res->next;                }                pHead1 = pHead1->next;            }        }        if(pHead1 == NULL)            res->next = pHead2;        if(pHead2 == NULL)            res->next = pHead1;        return tmp;    }};int main(){    int i;ListNode * p = (ListNode*)malloc(sizeof(ListNode));p->val = 1;p->next = NULL;ListNode * p1 = p;ListNode * q = (ListNode*)malloc(sizeof(ListNode));q->val = 1;q->next = NULL;ListNode * q1 = q;for(i = 2; i < 5; i++){p->next = (ListNode*)malloc(sizeof(ListNode));p = p->next;p->val = i;p->next = NULL;q->next = (ListNode*)malloc(sizeof(ListNode));q = q->next;q->val = i;q->next = NULL;}Solution s;ListNode * node = s.Merge(p1, q1);while(node){        cout << node->val << " ";        node = node->next;}    return 0;}

0 0