02-线性结构1 两个有序链表序列的合并

大二的时候,没打算考研,学了一年的java,数据结构学的也比较零散,没系统的学过,这学期打算考研,就把系统结构系统的学习一遍吧。

02-线性结构1 两个有序链表序列的合并 (15 分)

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

函数接口定义:

List Merge( List L1, List L2 );

其中List结构定义如下:

typedef struct Node *PtrToNode;

struct Node {

    ElementType Data; /* 存储结点数据 */

    PtrToNode  Next; /* 指向下一个结点的指针 */

};

typedef PtrToNode List; /* 定义单链表类型 */

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

~~一开始没注意到带头结点 ~~

这题不难,主要是合并后,L1和L2的这俩链表的输出为空,让L1和L2的指针域指向空就好了

    大二的时候,没打算考研,学了一年的java,数据结构学的也比较零散,没系统的学过,这学期打算考研,就把系统结构系统的学习一遍吧。

02-线性结构1 两个有序链表序列的合并 (15 分)

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

函数接口定义:

List Merge( List L1, List L2 );

其中List结构定义如下:

typedef struct Node *PtrToNode;

struct Node {

    ElementType Data; /* 存储结点数据 */

    PtrToNode  Next; /* 指向下一个结点的指针 */

};

typedef PtrToNode List; /* 定义单链表类型 */

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

~~一开始没注意到带头结点 ~~

这题不难,主要是合并后,L1和L2的这俩链表的输出为空,让L1和L2的指针域指向空就好了

List Merge(List L1, List L2) {
    List list = (List) malloc(sizeof(struct Node));
    List La, Lb, Lc;
    La = L1->Next;
    Lb = L2->Next;
    Lc = list;
    // 比较结点中的大小值,将较小的先添加到目标链表中
    while (La && Lb) {
        if (La->Data <= Lb->Data) {
            Lc->Next = La;
            Lc = La;
            La = La->Next;
        } else {
            Lc->Next = Lb;
            Lc = Lb;
            Lb = Lb->Next;
        }
    }
    // La后记不为空 继续添加,否则添加b  都是空,不可能的
    Lc->Next = La != NULL ? La : Lb;
    L1->Next = NULL;
    L2->Next = NULL;
    return list;
}

贴一张结果


TIM截图20190926195744.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容