合并两个排序的链表

来源:互联网 发布:简易地图绘制软件 编辑:程序博客网 时间:2024/06/16 23:25

题目

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

思路

每次比较两个链表的当前节点,把小的值取出来,并且让这个链表指向下一个节点,一直到至少有一个链表为空为止,如果还有链表有剩余(最多一个链表),把这个链表剩余的部分直接接上去就可以了。

参考代码

/*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 && !pHead2) return nullptr;        ListNode *head = nullptr , *pre;        bool first = true;        while (pHead1 && pHead2)        {            if (pHead1->val <= pHead2->val)            {                if (first)                {                    head = new ListNode(pHead1->val);                    pre = head;                    first = false;                }                else                {                    ListNode* temp = new ListNode(pHead1->val);                    pre->next = temp;                    pre = pre->next;                }                pHead1 = pHead1->next;            }            else            {                if (first)                {                    head = new ListNode(pHead2->val);                    pre = head;                    first = false;                }                else                {                    ListNode* temp = new ListNode(pHead2->val);                    pre->next = temp;                    pre = pre->next;                }                pHead2 = pHead2->next;            }        }        if (pHead1)        {            if (!head) return pHead1;            pre->next = pHead1;        }        if (pHead2)        {            if (!head) return pHead2;            pre->next = pHead2;        }        return head;    }};
原创粉丝点击