6-1 两个有序链表序列的合并

简介: 6-1 两个有序链表序列的合并

6-1 两个有序链表序列的合并 (15 分)


本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。


函数接口定义:


List Merge( List L1, List L2 );


其中List结构定义如下:


typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 存储结点数据 */
    PtrToNode   Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */


L1L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。


裁判测试程序样例:


#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表;空链表将输出NULL */
List Merge( List L1, List L2 );
int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
}
/* 你的代码将被嵌在这里 */


输入样例:


 3
 1 3 5
 5
2 4 6 8 10


结尾无空行


输出样例:


1 2 3 4 5 6 8 10 
NULL
NULL


结尾无空行


List Merge( List L1, List L2 ){
    List a,c,b,l;
    l=(List)malloc(sizeof(PtrToNode));
    a=L1->Next,b=L2->Next,c=l;
    while(a&&b){
        if(a->Data>b->Data){
            c->Next=b;
            b=b->Next;
        }
        else{
            c->Next=a;
            a=a->Next;
        }
        c=c->Next;
    }
    if(a) c->Next=a;
    if(b) c->Next=b;
    L1->Next=NULL;
    L2->Next=NULL;
    return l;
}
目录
相关文章
|
2月前
|
算法
LeetCode刷题---21.合并两个有序链表(双指针)
LeetCode刷题---21.合并两个有序链表(双指针)
【 腾讯精选练习 50 题】12—合并两个有序链表【简单】
【 腾讯精选练习 50 题】12—合并两个有序链表【简单】
数据结构实验之链表六:有序链表的建立
数据结构实验之链表六:有序链表的建立
|
4月前
leetcode-21:合并两个有序链表
leetcode-21:合并两个有序链表
24 0
LeetCode | 21. 合并两个有序链表
LeetCode | 21. 合并两个有序链表
|
5月前
|
运维
数据结构实验之链表四:有序链表的归并
数据结构实验之链表四:有序链表的归并
|
3月前
|
存储 算法
头歌:第1关:有序单链表的插入操作
头歌:第1关:有序单链表的插入操作
128 0
|
25天前
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表
|
2月前
|
C语言
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
|
3月前
Leecode之合并两个有序链表
Leecode之合并两个有序链表