zoukankan      html  css  js  c++  java
  • 合并两个单链表(链表方式)

    假设头指针为La、Lb单链表分别为线性表LA、LB的存储结构,现在要合并La、Lb得到单链表Lc

    void MergeList_L(LinkList La, LinkList Lb, LinkList Lc){
        //已知La、Lb的元素按值非递减排列
        //归并La、Lb得到单链表Lc,Lc的元素也是按值非递减排列的
        LinkList pa,pb,pc;
        pa = La->next;
        pb = Lb->next;
        Lc = pc = La;//用La的头结点作为Lc的头结点
        while(pa && pb){
            if(pa->data<=pb->data){
                pc->next = pa;
                pc = pa;
                pa = pa->next;
            }
            else{
                pc->next = pb;
                pc = pb;
                pb = pb->next;
            }
        }
        pc->next = pa?pa:pb;//插入剩余段 
        free(Lb); 
    }

     链表合并实例:

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #include<iostream>
     6 using namespace std;
     7 #define OVERFLOW -2
     8 typedef struct Node{
     9     int data;
    10     struct Node *next;
    11 }Node,*LinkList;
    12 
    13 int InitList(LinkList &L){
    14     L = (LinkList)malloc(sizeof(Node));
    15     if(!L)
    16         exit(OVERFLOW);
    17     L->next = NULL;
    18     return 1;
    19 }
    20 
    21 
    22 
    23 void CreatList(LinkList &L, int n){
    24     LinkList p,r;
    25     r = L;
    26     int a;
    27     for(int i = 0; i < n; i++){
    28         p = (LinkList)malloc(sizeof(Node));
    29         scanf("%d",&a);
    30         p->data = a;
    31         r->next = p;
    32         r = p;
    33     }
    34     r->next = NULL;
    35 }
    36 
    37 void PrintList(LinkList &L){//输出单链表 
    38     LinkList q;
    39     q = L->next;
    40     while(q){ 
    41         printf("%d ",q->data);
    42         q = q->next;
    43     }  
    44 }
    45 
    46 void Combine(LinkList La, LinkList Lb, LinkList Lc){
    47     LinkList pa,pb,pc;
    48     pa = La->next;
    49     pb = Lb->next;
    50     Lc = pc = La;
    51     while(pa && pb){
    52         if(pa->data <= pb->data){
    53             pc->next = pa;
    54             pc = pa;
    55             pa = pa->next;
    56         }
    57         else{
    58             pc->next = pb;
    59             pc = pb;
    60             pb = pb->next;
    61         }
    62     }
    63     pc->next = pa? pa:pb;
    64     free(Lb);
    65     PrintList(Lc);
    66 }
    67 
    68 int main(){
    69        int m,n;
    70     LinkList LA,LB;
    71     InitList(LA);
    72     InitList(LB);
    73     cout<<"请输入创建单链表LA的元素个数:";
    74     cin>>m;
    75     CreatList(LA,m);
    76     cout<<"请输入创建单链表LB的元素个数:";
    77     cin>>n;
    78     CreatList(LB,n);
    79     cout<<endl; 
    80     cout<<"     链表LA中的元素"<<endl;
    81     cout<<"-----------------------
    ";
    82     PrintList(LA);
    83     cout<<endl; 
    84     cout<<"
    
         链表LB中的元素"<<endl;
    85     cout<<"-----------------------
    ";
    86     PrintList(LB);
    87     cout<<"
    
    LA、LB合并后的输出结果:"<<endl;
    88     LinkList Lc;
    89     InitList(Lc);
    90     Combine(LA,LB,Lc); 
    91     return 0; 
    92 }

    运行结果:

  • 相关阅读:
    使用golang访问kubebernetes
    使用 Rancher 管理现有 Kubernetes 集群
    Running powershell scripts during nuget package installation and removal
    How to Create, Use, and Debug .NET application Crash Dumps in 2019
    寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
    Selenium+Java之解决org.openqa.selenium.InvalidArgumentException: invalid argument报错问题
    Selenium环境搭建
    关于Xpath定位方法知道这些基本够用
    Web自动化之浏览器启动
    【翻译】编写代码注释的最佳实践
  • 原文地址:https://www.cnblogs.com/geziyu/p/9903351.html
Copyright © 2011-2022 走看看