码迷,mamicode.com
首页 > 编程语言 > 详细

合并两个排序的链表

时间:2018-12-26 16:51:23      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:题目   合并两个排序的链表   end   bre   ret   while   null   int   div   

题目

输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的。

思路

两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中。

#include <iostream>
using namespace std;

struct node
{
    int data;
    struct node *next;
};
class Solution
{
    public:
        Solution();
        void create();
        void print();
        void merge(node *h);
        node *r_merge(node *h1,node *h2);
        node *head;
};
Solution::Solution()
{
    head=new node();
    head->next=nullptr;
    head->data=0;
}
void Solution::create()
{
    if(head==nullptr)
        return;
    auto t=head;
    int x;
    while(1)
    {
        cin>>x;
        if(x)
        {
            t->next=new node();
            t=t->next;
            t->data=x;
            t->next=nullptr;
        }
        else
        {
            t->next=nullptr;
            break;
        }
    }
} 
void Solution::print()
{
    auto n=head;
    while(n)
    {
        cout<<n->data<<endl;
        n=n->next;
    }
}
void Solution::merge(node *h)
{
    if(!head||!h||!head->next||!h->next)
        return;
        
    node *h1=head->next;
    node *h2=h->next;
    node *h3=head;
    h3->next=nullptr;
    while(h1&&h2)
    {
        if(h1->data<=h2->data)
        {
            h3->next=h1;
            h3=h3->next;
            h1=h1->next;
        }
        else
        {
            h3->next=h2;
            h3=h3->next;
            h2=h2->next;
        }
    }
    if(h1)
        h3->next=h1;
    else
        h3->next=h2;
}
node *Solution::r_merge(node *h1,node *h2)
{
    if(!h1)
        return h2;
    else if(!h2)
        return h1;
        
    node *h3=nullptr;
    if(h1->data<=h2->data)
    {
        h3=h1;
        h3->next=r_merge(h1->next,h2);
    }
    else
    {
        h3=h2;
        h3->next=r_merge(h1,h2->next);
    }
    return h3;
}
int main()
{
    Solution s,S;
    s.create();
    S.create();
    //s.merge(S.head);
    s.head=s.r_merge(s.head->next,S.head->next);
    s.print();
    return 0;
}

 

合并两个排序的链表

标签:题目   合并两个排序的链表   end   bre   ret   while   null   int   div   

原文地址:https://www.cnblogs.com/tianzeng/p/10179715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!