0
点赞
收藏
分享

微信扫一扫

2个单链表的合并

正义的杰克船长 2022-04-13 阅读 55

这是函数题模板。这里写题目要求。
1、已知L1和L2分别指向两个单链表的头结点,其长度分别为m和n。试写一算法将这两个链表连接在一起形成L3,请分析你的算法的时间复杂度。(要求将长的单链表接在短的后面,并且要求空间复杂度o(1)。)

函数接口定义:

在这里描述函数接口。例如:
void connect(LinkList *&L3,LinkList *L1,LinkList *L2);

在这里解释接口参数。例如:L1、L2是已知单链表,合并成一个单链表L3。。

裁判测试程序样例: 

在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode    //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;
} LinkList;
void CreateListR(LinkList *&L,ElemType a[],int n)
//尾插法建立单链表
{
    LinkList *s,*r;
    L=(LinkList *)malloc(sizeof(LinkList));      //创建头结点
    L->next=NULL;
    r=L;                    //r始终指向终端结点,开始时指向头结点
    for (int i=0;i<n;i++)
    {    
        s=(LinkList*)malloc(sizeof(LinkList));//创建新结点s
        s->data=a[i];
        r->next=s;            //将结点s插入结点r之后
        r=s;
    }
    r->next=NULL;            //终端结点next域置为NULL
}

int ListLength(LinkList *L)    //求线性表的长度
{
    LinkList *p=L;int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkList *L)    //输出线性表
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

void connect(LinkList *&L3,LinkList *L1,LinkList *L2);

int main()
{
    LinkList *L3,*L1,*L2;
    int n=10,m=8;
    ElemType a[]={1,2,3,4,5,6,7,8,9,10};
    ElemType b[]={1,2,3,4,5,6,7,8};
    CreateListR(L1,a,n);
    CreateListR(L2,b,m);
    printf("L1:");DispList(L1);
    printf("L2:");DispList(L2);
    printf("L1,L2->L3\n");
    connect(L3,L1,L2);
    printf("L3:");DispList(L3);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:


输出样例:

在这里给出相应的输出。例如:

L1:1 2 3 4 5 6 7 8 9 10 
L2:1 2 3 4 5 6 7 8 
L1,L2->L3
L3:1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 10 

代码样例: 

void connect(LinkList *&L3,LinkList *L1,LinkList *L2) { LinkList *p,*q; int m,n; m=ListLength(L1);
n=ListLength(L2);

    if(m<n)    {
L3=L1;

p=L1;
q=L2;
  }
else {
L3=L2;
p=L2;
q=L1;
} 
while (p->next!=NULL)
{
    p=p->next;        
            
}
p->next=q->next;    
free(q);
}

 

 

举报

相关推荐

0 条评论