输出一个单向链表,找出倒数第k个结点的值
输入描述:
1.输入链表结点的个数
2.输入链表的值
3.输入k的值
示例1:
输入:
8
1 2 3 4 5 6 7 8
7
#include <stdio.h>
#include<stdlib.h>
//第一步定义结构体
typedef struct node{
int data;
struct node *next;
}ElemSN;
int main(void){
int n,k;
printf("请输入链表的结点个数:");
scanf("%d",&n);
//正向建链
ElemSN *head,*p;
head=(ElemSN *)malloc(sizeof(ElemSN));
p=(ElemSN *)malloc(sizeof(ElemSN));
head->next=p; //链接首结点和头结点
printf("输入结点值:");
for(int i=0;i<n;i++){
scanf("%d",&p->data); //键盘输入结点值
p->next=(ElemSN *)malloc(sizeof(ElemSN));//每输入一个值就新创一个结点
p=p->next; //挂链
}
p=head->next; //将p指针又指回到头结点,因为要输入
for(int j=0;j<n;j++){
printf("%5d",p->data);
p=p->next;
}
printf("\n");
//查找第k个结点
printf("请输入要查找倒数第几个结点:");
scanf("%d",&k);
int s;
for(s=0,p=head->next;s<n-k;s++){ //因为输入的是倒数第几个结点,链表只能正向遍历,所以用总结点数减去输入的就是正向要指的结点
p=p->next; //使用遍历,让p直到指定结点上
}
printf("%d\n",p->data);
return 0;
}