#include<stdio.h>
#include<stdlib.h>
int len = 10;
int a[10] = { 8,4,6,9,0,1,4,7,9,3 };
typedef struct LNode {
int data;
struct LNode* link;
}LNode, * Link;
Link creatlink(Link& list) {
list = (Link)malloc(sizeof(LNode));//创建头结点
list->link = NULL;
Link L = list;
for (int i = 0; i < len; i++) {
Link P = (Link)malloc(sizeof(LNode));//创建新结点
P->data = a[i];
P->link = NULL;
L->link = P;
L = L->link;
}
return L;
}
int search(Link& list,int k) {//查找倒数第k个数
if (!(list->link))
return -1;
Link right = list->link;
Link left = list->link;
for(int i = 0; i < k - 1; i++) {//首先将右指针移动k-1次,这样左右指针间隔大小刚好满足倒数第k个的位置的相对位置关系
right = right->link;
}
while (1) {//第二步左右指针齐头并进,当右指针到达终点时,左指针指向的结点就是倒数第k个结点
if (!(right->link))
break;
right = right->link;
left = left->link;
}
return left->data;
}
int main()
{
Link list;//表头指针
creatlink(list);
int k;//倒数第k个数
scanf("%d", &k);
if (k > len||k<=0) {
printf("k不合法");
return 0;
}
int result = search(list, k);
if (result == -1) {
printf("空链表" );
}else
printf("倒数第%d个数:%d", k,result);
}
带头单链表查找倒数第k个值
最新推荐文章于 2025-05-24 22:49:16 发布