C语言——将两个递增的有序链表合并为一个递增的有序链表

考察了指针 和链表的相关知识,用尾插法可以直接进行合并

将 有序的链表p1 和 p2 的头部比较值的大小,然后将比较后得出的头结点 插入到新链表的尾部,不断循环遍历,最后输出一个新链表

原理:需要新建两个链表p1和p2, 直接对原有的p1和p2两个链表进行操作,

用p1和p2的头部对 新链表  使用尾插法,

比较p1和p2的头部值,将 较大的头部插入 新链表 的尾部,同时对移走头部的链表进行头部删除

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

typedef struct NUM {//定义一个结构体

	int num;
	struct  NUM* pNext;
} num, * pnum;

//该子函数原理:
//           建立了一个新链表,用尾插法 将p1和p2两个链表插入到新链表的尾部,同时对移动的旧链表的结点删除
void insert(pnum *pphead,pnum *pptail,int Input) {

	pnum pnew = (pnum)calloc(sizeof(num), 1);

	memset(pnew, 0, sizeof(num));

	pnew->num = Input;//指向 新输入的值

	pnum pre = *pphead, pcur = *pphead;

	if (NULL==*pphead) {   //判断链表是否为空

		//如果链表为空
		*pphead = pnew;
		*pptail = pnew;
	}
	else if(Input <=(*pphead)->num) {

		(*pptail)->pNext = pnew;
		*pptail = pnew;
	}
	else {

		while (pcur !=NULL) {

			if (pcur->num >Input) {

				pnew->pNext = pcur;
				pre->pNext = pnew;
				break;
			}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值