C语言——找出链表的倒数第四个结点

C语言——找出链表的倒数第四个结点,第1张

C语言——找出链表的倒数第四个结点

原理:例如 给定 数列 1 2 3 4 5 6

第一步:定义:pre=1 ,pcur=1 两者同时指向第一个元素

第二步:通过 循环 让 pcur=4 指向第四个元素 ,即让pre和pcur两者保持固定间隔

第三步:此时 判断出pcur=4, 让pre =2, 即让pre往后移动一位,

第五步 pre 移动后 pcur 也要往后移动一位 ,即pcur=5

最后 pcur=6  走到链表尾部 ,pre=3 指向该链表的倒数第四个元素

#include
#include
#include

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

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

//该子函数 是尾插法
void insert(pnum* phead, pnum* ptail, int Input) {

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

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

	pnew->num = Input;

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

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

		(*ptail)->pNext = pnew;
		*ptail = pnew;
	}
}

//该子函数 是打印输出结果
void print(pnum *phead) {

	pnum pcur = phead;
	while (pcur) {

		printf("%d",pcur->num);
		pcur = pcur->pNext;
	}
	printf("n");
}

//该子函数 是计算链表的长度
int count_List(pnum phead) {

	int count = 0;
	pnum pcur = phead;

	while (pcur) {

		++count;
		pcur = pcur->pNext;

	}
	return count;
}


int main() {


	pnum phead = NULL;
	pnum ptail = NULL;

	pnum pre = NULL;
	pnum pcur = NULL;

	pnum r= NULL;//定义头指针 

	int InPut;//定义要输入的数

	int len=0;
	int x = 1;

	
	while (scanf_s("%d", &InPut) != EOF) {

		insert(&phead,&ptail,InPut);//调用子函数 在子函数中具体实现功能
	}
	len = count_List(phead);//判断链表长度
	

	if (len < 4) {

		printf("该链表的长度小于4n");
	}
	else {
		pre = pcur = phead;
	}

	while (pcur->pNext) {

		if (x>=4) {

			pre = pre->pNext;
		}

		pcur = pcur->pNext;
		x++;
	}

	printf("链表倒数第四个元素是:%dn",pre->num);
	
}
	

运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存