题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
思路
- 首先创建链表
- 创建头结点(头结点指向NULL,元素值一般不使用)
- 创建的节点开始指向0,值为输入的数值
- 利用头插法,创建的节点指向头结点的下一结点,将数据元素倒序存储到链表中
- 因为输入多组数据,因此使用while循环输入
- 获得位置元素,找到对应位置的数据输出
- 使用完循环释放内存,防止内存泄漏
Answer
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int key;
struct node *next;
}listnode, *listlink;
int main(){
int len,pos;
listlink H;
listlink p;
while(scanf("%d",&len) != EOF){
//创建头结点
H = (listlink)malloc(sizeof(listnode));
H->key = 0;
H->next = NULL;
for(int i=0; i<len; i++){
p = (listlink)malloc(sizeof(listnode));
scanf("%d",&p->key);
p->next = NULL;
//头插法,相当于倒序输入
p->next = H->next;
H->next = p;
}
scanf("%d",&pos);
p=H;
for(int i=0;i<pos; i++){
p = p->next;
}
printf("%d\n",p->key);
p = H;
for(int i=0; i<len; i++){
p = H->next;
H->next = p->next;
free(p);
}
free(H);
}
return 0;
}