首頁  >  文章  >  後端開發  >  c語言實現兩個有序鍊錶的合併(程式碼範例)

c語言實現兩個有序鍊錶的合併(程式碼範例)

青灯夜游
青灯夜游轉載
2020-10-26 15:07:564005瀏覽

本篇文章透過程式碼範例介紹一下使用c語言合併兩個有序鍊錶的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

c語言實現兩個有序鍊錶的合併(程式碼範例)

教學推薦:《c語言教學影片

c語言實作兩個有序鍊錶的合併

現有兩個有序單鍊錶,透過程式碼實作將兩個單鍊錶合併為一個有序的新表,要求使用舊表的空間,不能新分配記憶體

#include <stdio.h>#include <stdlib.h>typedef struct List{
	int a;
	struct List *next;}list;void newList(list *l){
	//初始化头节点
	l->next = NULL;}void setList(list * l){
	//建立链表
	int i = 1;
	int j;
	while (i)
	{
		scanf_s("%d", &j);
		if (j == -1)
		{
			i = 0;
		}
		else
		{
			list *l1 = (list *)malloc(sizeof(list));//为新的结点分派内存
			l1->a = j;//储存数据
			/*
			将最后结点的next区域指向新结点
			将新结点的next区域指向设置为空
			*/
			l->next = l1;
			l1->next = NULL;
			l = l->next;
		}
	}}void printfList(list *l){
	printf("该链表内容为:\n");
	while (l->next)
	{
		printf("%d\t", l->next->a);
		l = l->next;
	}
	printf("\n");}list *add(list *LA, list *LB){
	//记录两个链表的头结点
	list *la=LA;
	list *l = LA;
	list *lb = LB;
	//移动指针
	LA = LA->next;
	LB = LB->next;
	la->next = NULL;
	while (LA!=NULL&&LB!=NULL)
	{
		/*
		将两个结点的数据进行比较,数据较小的结点接在头结点后面,
		*/
		if (LA->a < LB->a)
		{
			la->next = LA;
			la = LA;
			LA = LA->next;
		}
		else
		{
			la->next = LB;
			la = LB;
			LB = LB->next;
		}
	}
	//若其中一个链表的结点已经全接在新表中则将另一个链表的剩余结点接在新表的后面
	if (LA)
	{
		la->next = LA;
	}
	if(LB)
	{
		la->next = LB;
	}
	free(lb);
	return l;}int main(){
	//为结点分配内存
	list *LA = (list *)malloc(sizeof(list));
	list *LB = (list *)malloc(sizeof(list));
	//初始化结点
	newList(LA);
	newList(LB);
	//建立链表
	setList(LA);
	setList(LB);
	//输出链表的内容
	printf("LA的数据:\n");
	printfList(LA);
	printf("LB的数据:\n");
	printfList(LB);
	list *LC = add(LA, LB);
	//输出合并后的新表
	printfList(LC);
	system("pause");
	return 0;}

c語言實現兩個有序鍊錶的合併(程式碼範例)

更多程式相關知識,請造訪:程式設計入門! !

以上是c語言實現兩個有序鍊錶的合併(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除