剑指offer--17.合并两个排序的链表

来源:互联网 发布:中国科学院待遇 知乎 编辑:程序博客网 时间:2024/05/01 22:16

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

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* pRes=NULL;        if(pHead1->val<=pHead2->val)        {            pRes=pHead1;            pRes->next=Merge(pHead1->next,pHead2);        }        else        {            pRes=pHead2;            pRes->next=Merge(pHead1,pHead2->next);        }        return pRes;    }};

非递归思路

class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {        if(pHead1==NULL)            return pHead2;        else if(pHead2==NULL)            return pHead1;        //pRes返回链表的头结点        ListNode* pRes=NULL;        //pLast返回链表的尾节点        ListNode* pLast=NULL;        if(pHead1->val<=pHead2->val)        {            pRes=pHead1;            pHead1=pHead1->next;        }        else        {            pRes=pHead2;            pHead2=pHead2->next;        }        pLast=pRes;        while(pHead1!=NULL&&pHead2!=NULL)        {            if(pHead1->val<=pHead2->val)            {                pLast->next=pHead1;                pLast=pLast->next;                pHead1=pHead1->next;            }            else            {                pLast->next=pHead2;                pLast=pLast->next;                pHead2=pHead2->next;            }        }        if(pHead2==NULL)            pLast->next=pHead1;        else if(pHead1==NULL)            pLast->next=pHead2;        return pRes;    }};
0 0
原创粉丝点击