码迷,mamicode.com
首页 > 其他好文 > 详细

合并链表

时间:2016-10-14 23:12:02      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

【问题描述】

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("\n");
}
int main()
{
    LNode *La,*Lb,*Lc;
    La=CreateLinkList();
    Lb=CreateLinkList();
    Merge(La,Lb,&Lc);
    printf(" The current List is:\n");
    print(Lc);
}

 

合并链表

标签:

原文地址:http://www.cnblogs.com/misamisa/p/5962107.html

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