把两个有序排列的单向整数链表合并成一个有序排列的的整数链表?

从小到大依次输入两列整数,以-1表示结尾,然后根据这两列整数构造两个单向链表,按整数大大小关系把这两个链表合并成一个有序单向链表,最后从头到尾遍历输出这个链表的数据域(用一个空格隔开)。

c++

1个回答

/*设head1和head2是两个非空单向链表,数据值有重复且升序排序
将head1和head2合并成一个升序链
*/

#include<stdio.h>
#include<stdlib.h>

//定义结构体单元 
typedef struct node{
    int data;//结构体数据域 
    struct node* next;//结构体指针域 
}ElemSN;
//逆向创建单向链表(头插法)
ElemSN *PreCreatLink(int a[],int n)
{
    ElemSN *head=NULL,*p;
    for(int i=n-1;i>-1;i--)
    {
        p=(ElemSN*)malloc(sizeof(ElemSN));
        p->data=a[i];
        p->next=head;
        head=p;
    }
    return head;
 } 


 ElemSN* Combine(ElemSN *head1,ElemSN *head2)
 {
    ElemSN *head,*p,*tail;
    head=NULL;
    while(head1&&head2)
    {
        if(head1->data<head2->data)
        {
            p=head1;
            head1=head1->next;
         }
        else
        {
            p=head2;
            head2=head2->next;
        }
        p->next=NULL; 
        if(!head)
        head=tail=p;
        else
        {
            tail=tail->next=p;
        }
     }
     if(head1)
     p=head1;
     else
     p=head2;
     tail->next=p;
     return head;
 }

   //打印链表所有结点的值
   void PrintLink(ElemSN* head)
 {
    ElemSN *p=head;
    for(;p;p=p->next)
    printf("%5d",p->data);
 } 


 int main(void)
 {
    ElemSN *head1,*head2,*head;
    int a[7]={2,3,5,6,7,9,11};
    int b[5]={2,4,5,7,9};
    head1=PreCreatLink(a,7);    //创建链表head1 
    head2=PreCreatLink(b,5);    //创建链表head2 
    head=Combine(head1,head2);  //将两个有序链表合并成一个有序链表 
    PrintLink(head);       //输出链表 
  } 

https://blog.csdn.net/vk5176891/article/details/53649225
https://blog.csdn.net/qq_39241239/article/details/80897992

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
线索二叉树,怎么可能把二叉树变为双向链表呢?
2
C语言单链表相关问题求解,具体要求如下
2
c语言中两个链表的合并(不用结点的方式)总是错误的
1
c语言链表问题,希望能在10号之前得到解答
0
用c#做基于双向循环链表的长整数运算
1
C语言多项式加减运算(用链表)
1
输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。
1
C++设计一个循环链表,用来表示大整数
1
怎么合并链表????
4
问一个很愚蠢的基础问题,p=p->next链表循环里,为什么这样不会覆盖掉链表的值啊
1
【链表】为什么用L->Next=NULL就出错
1
c语言,为什么用fread 读入文件 链表 每次都会多一个节点?
0
Java填空题,有大神帮忙解答吗?
1
C语言求助:输入一个字符串,将其中的字母字符输入一个链表,将其中的数字字符输入另一个链表。
0
链表解决这里的路径的一个遍历的算法问题的做法怎么实现,用C语言的程序设计语言
0
数据结构两个变量的链表的综合运用,采用C程序的语言的代码的思路实现
1
链表操作中即使函数传入的是链表指针,若根节点没有改变,链表也会改变?
1
求助:如何解决单向链表的删除函数出的问题?
0
在单链表中统计某区域内的元素,将获得元素插入新单链表,并打印新链表元素在原链表中的序号