C/C++教程

C++合并有序链表

本文主要是介绍C++合并有序链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <iostream>
using namespace std;
//定义链表结构
struct my_list{
    int val;
    my_list *next;
    my_list(int _val):val(_val),next(nullptr){}
};
my_list* merge(my_list* l1,my_list* l2)
{
    if(l1==nullptr) return l2;//实参为空 
    if(l2==nullptr) return l1;
    my_list head(0);//定义虚拟头节点
    my_list* node=&head;//操作节点
    while(l1!=nullptr && l2!=nullptr)
    {
        if(l1->val > l2->val)//node后面跟较小的节点 
        {
            node->next=l2;
            l2=l2->next;
        }
        else{
            
            node->next=l1;
            l1=l1->next;
        }
        node=node->next;//待比较节点后移 
        if(l1==nullptr){//l1为空,node后接l2 
            node->next=l2;
        }
        if(l2==nullptr)//l2为空,node后接l1 
        {
            node->next=l1;
        }
        
    } 
    return head.next;
};
int main(int argc, char *argv[])
{
    my_list *node0=new my_list(0);
    my_list *node1=new my_list(1);
    my_list *node2=new my_list(2);
    my_list *node3=new my_list(4);
    
    my_list *node4=new my_list(1);
    my_list *node5=new my_list(2);
    my_list *node6=new my_list(3);
    node0->next=node1;
    node1->next=node2;
    node2->next=node3;
    node3->next=nullptr;
    
    node4->next=node5;
    node5->next=node6;
    node6->next=nullptr;
    auto node=merge(node0,node4);
    while(node!=nullptr)
    {
        cout<<node->val<<" ";
        node=node->next;
    }
    
    return 0;
}

 

这篇关于C++合并有序链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!