`

链表归并

阅读更多

以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过),我也要找工作,准备一下笔试了:

typedef struct Node {
	int data;
	struct Node *next;
}Node;

Node * merge(Node *pa,Node *pb){
	Node *header;
	Node *p1;
	Node *p2;
	Node *p = pa;
	Node *q = pb;

	header = (Node *)malloc(sizeof(Node));
	header->next = NULL;
	Node *tail = header;
	
	while(p != NULL && q != NULL){
		p1 = p,p2 = q;
		if(p1->data < p2->data){
			tail->next = p1;
			p = p1->next;
			p1->next = NULL;				
		}else{
			tail->next = p2;
			q = p2->next;
			p2->next = NULL;
		}
		tail = tail->next;
	}

	if(p != NULL){
		tail->next = p;
	}

	if(q != NULL){
		tail->next = q;
	}
	return header;
}

 gx上次开始让我给写这个,结果他笔试的时候居然让写个递归的:

void merge(Node *tail,Node *pa,Node *pb){
   Node *p = NULL;
   if(pa != NULL && pb != NULL){
	if(pa->data < pb->data){
		tail->next = pa;
		p = pa->next;
		pa->next = NULL;
		merge(pa,p,pb);
	}else{
		tail->next = pb;
		p = pb->next;
		pb->next = NULL;
		merge(pb,pa,p);
	}
    }
   
   if(pa == NULL)
	tail->next = pb;
   if(pb == NULL)
	tail->next = pa;
}

 

 

分享到:
评论

相关推荐

    链表归并的操作,将两个链表合并成一个链表

    当我们面临两个已排序的链表需要合并成一个有序链表时,链表归并操作显得尤为重要。这种操作通常出现在诸如合并排序等算法中,其目的是有效地整合两个已经排序的链表,保持合并后的链表依然有序。 在链表归并的过程...

    C语言——链表的归并_c语言链表详解

    ### C语言中的链表归并实现 在C语言中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据元素以及指向下一个节点的指针。链表的归并是指将两个或多个已排序的链表合并成一个新的已排序链表。这种...

    C语言中数据结构之链表归并排序实例代码

    C语言中数据结构之链表归并排序实例代码 问题  设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增排序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中...

    归并两个链表

    对于两个链表的归并,自己想了好久才做出来的,希望对初学的人有点帮助吧

    顺序表和链表的归并排序

    可以创建一个新的空链表作为结果链表,然后如同顺序表的归并过程,比较两个链表的头元素,将较小的元素添加到结果链表,并将指向较小元素的指针移动到下一个节点,直到其中一个链表为空,然后将另一个链表的所有元素...

    JavaScript实现链表插入排序和链表归并排序

    在本篇技术文档中,介绍了如何使用JavaScript实现链表的两种常见排序算法:链表插入排序和链表归并排序。这两种排序算法在数据结构中占据着重要的位置,尤其是在链表这种非连续存储的数据结构中。下面详细介绍这两种...

    链表的归并 数据结构 C语言实现

    这里我们将深入探讨链表归并的概念、原理以及C语言的实现方法。 链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。在链表的归并操作中,我们通常处理两个已经排序的链表...

    双链表归并

    ◎ 实验题目: 合并两个链表 ◎ 实验目的:熟悉顺序表和指针的用法,并能用于具体问题 ◎ 实验内容:将两个链表合并为一个带头结点的有序循环链表

    归并排序(链表和数组) 数组和链表.pdf

    链表归并排序的算法思想是将链表分解成多个子链表,然后两两合并,直到得到一个有序的链表。 在链表归并排序中,我们需要定义一个链表节点结构体,包括节点的值和指向下一个节点的指针。然后,我们可以使用递归的...

    链表的归并排序和快速排序

    **链表归并排序步骤**: 1. **分割**:找到链表的中间节点,将其后继节点设为null,从而将链表分为两个子链表。 2. **递归排序**:对两个子链表分别进行归并排序。 3. **合并**:将两个已排序的子链表合并成一个有序...

    链表的归并实验源代码

    数据结构实验,链表归并的源代码,自己编写

    双链表实现链表排序,合并等操作

    4. **链表排序**:可以使用归并排序(Merge Sort)算法对链表进行排序,它是一种分治策略,将链表分为两半,分别排序,然后合并。 ```cpp Node* mergeSort(Node* head) { if (head == nullptr || head-&gt;next == ...

    归并有序链表

    归并有序链表是一种在计算机科学中常见的数据结构操作,主要应用于排序算法。在这个问题中,我们看到两个有序的字符链表,一个由数字“12cde”组成,另一个由字母“stuvwx”组成,任务是将这两个链表合并成一个新的...

    Go语言有序链表归并

    在本文中,我们将深入探讨如何在Go语言中实现有序链表的归并操作。这个话题主要涉及两个核心知识点:链表结构以及链表的合并算法。 首先,让我们来看一下链表的基本概念。链表是一种线性数据结构,与数组不同,它的...

    C语言数据结构 链表与归并排序实例详解

    本文将深入探讨两种关键的数据结构操作:链表和归并排序。首先,链表是一种非连续存储的数据结构,它的每个元素(节点)包含数据和指向下一个节点的引用。而归并排序是一种高效的排序算法,尤其适用于链表的排序,...

    一个基于链表的归并排序程序

    1.编写一个基于链表的归并排序程序。 1)随机生成两个链表,利用随机数进行初始化 2)要求给出链表的结构,链表的初始化等排序中用到的基本操作函数 3)显示相关的输出信息 编程环境:Linux C

    基于vc++6.0用链表实现归并排序

    本教程将深入探讨如何在VC++6.0环境下,利用链表数据结构实现归并排序。 链表是一种非连续、非顺序的存储结构,每个元素称为节点,包含数据域和指针域。节点通过指针域连接成链,使得数据可以在内存中任意位置存储...

    线性表的归并 个人作业 简单明了

    本资源中的“链表的归并”可能包含了一个具体的链表归并实现,包括链表节点的定义、遍历链表的逻辑以及如何正确合并节点,形成新的有序链表。通过对比顺序表和链表的归并方法,我们可以深入理解数据结构的不同特性和...

    双向循环链表C++源代码

    双向的循环链表的C++源代码 实现正逆序遍历,链表归并,插入,删除,查询等基本操作

Global site tag (gtag.js) - Google Analytics