原理:例如 给定 数列 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); }
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)