zoukankan      html  css  js  c++  java
  • 合并链表

    【问题描述】

    1、建立两个有序的单链表,表中元素的数据类型自己指定;

    2、将建立的两个链表合并为一个新的有序的单链表;

    3、输出显示已合并好的有序的单链表。

    【输入形式】输入表1的元素个数,表1的元素值(逆序),同表1,输入表2的数据。
    【输出形式】输出合并后的元素值。
    【样例输入】

       3       //表1元素个数

       22 21 19  //表1的元素值(逆序)

       4         //表2元素个数

       92 91 31 29  //表2的元素值(逆序)
    【样例输出】

       The current List is:

       19,21,22,29,31,91,92

    思路分析:将两个链表的值比较然后,较大者的节点用逆向建立单链表法链入。

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int data;
        struct node *next;
    }LNode;
    
    LNode *CreateLinkList()
    {
        LNode *head,*p,*q;
        int i,n;
        head=(LNode*)malloc(sizeof(LNode));
        head->next=NULL;
        p=head;
        q=p;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            p=(LNode*)malloc(sizeof(LNode));
            scanf("%d",&p->data);
            p->next=NULL;
            q->next=p;
            q=p;
        }
        return head;
    
    }
    
    void Merge(LNode *La,LNode *Lb,LNode **Lc)
    {
        LNode *p,*q,*s;
        p=La->next;
        q=Lb->next;
        *Lc=La;
        (*Lc)->next=NULL;
        free(Lb);
        while(p!=NULL&&q!=NULL)
        {
            if(p->data>q->data)
            {
                s=p;
                p=p->next;
            }
            else
            {
                s=q;
                q=q->next;
            }
            s->next=(*Lc)->next;
            (*Lc)->next=s;
        }
        if(p==NULL)
          p=q;
        while(p!=NULL)
        {
            s=p;
            p=p->next;
            s->next=(*Lc)->next;
            (*Lc)->next=s;
        }
    }
    
    void print(LNode *p)
    {
        int first=1;
        p=p->next;
        while(p!=NULL)
        {
            if(first)
            first=0;
            else
            printf(",");
            printf("%d",p->data);
            p=p->next;
    
        }
        printf("
    ");
    }
    int main()
    {
        LNode *La,*Lb,*Lc;
        La=CreateLinkList();
        Lb=CreateLinkList();
        Merge(La,Lb,&Lc);
        printf(" The current List is:
    ");
        print(Lc);
    }
  • 相关阅读:
    C++中virtual(虚函数)的用法
    testlins
    MATLAB——matlab特殊符号表【转载】
    VS-按F12无法跳转到函数定义,点击右键也无法跳转
    fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
    Matlab7.1——启动时只显示Logo
    CANopen——总线基本知识
    CANopen——笔记
    ASCII表格
    Codesys——AD_DA在PID控制中的作用
  • 原文地址:https://www.cnblogs.com/misamisa/p/5962107.html
Copyright © 2011-2022 走看看