#include<stdio.h>
#include<stdlib.h>
typedef struct list{
int num;
struct list *next;
}List ,*LIST;
LIST createlist(LIST *L,int k)
{
int n; //用来计数
int i=1;
LIST r,s,head;
*L=(LIST)malloc(sizeof(List)); //初始化空链表
(*L)->next=NULL; //空表指向为空
r=s=(LIST)malloc(sizeof(List));
while(s->num !=-1)
{
s=(List *)malloc(sizeof(List));
// printf("请输入num的信息\n");
scanf("%d",&s->num);
if(n==0)
{ //当为初始节点时,头节点等于初始节点
head=s;
(*L)->next=head; //空表的下一个
}
else
{
r->next=s;
}
r=s;
n++;
}
r->next=NULL;
printf("\n创建链表完成,共有%d个节点\n",n-1);
printf("\n要找的倒数%d个位置上的信息\n",k);
if(k<0 || k>(n-1))
{
printf("您要找的位置不合法\n");
return NULL;
}
printf("\n按照顺数位置,您要找的是第%d个位置上的内容,内容如下\n",n-k);
//输出想要查找的那个数
s=head;
while(i <(n-k))
{
s=s->next;
i++;
}
printf("\n\n%d\n\n",s->num);
}
void main()
{
int k;
LIST p,q;
printf("请输入想要查找的位置\n");
scanf("%d",&k);
LIST *head=&p; //指向 结构体指针 的指针 ,这里的*head就相当于p
createlist(head,k);
printf("\n开始输出整个链表的内容\n");
*head=(*head)->next; //空表的表头为空,必须让它指向它的下一个节点,也就是头节点
while((*head)->num !=-1)
{
printf("%d ",(*head)->num);
(*head)=(*head)->next;
}
}
运行结果如下: