题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
#include "stdio.h"
typedef struct List{
int val;
struct List *next;
}list;
/*创建链表*/
list *creatlist(void)
{
list *head = (list *)calloc(1,sizeof(list));
head->next = NULL;
return head;
}
/*创建新节点*/
list *creatnode(int data)
{
list *newNode = (list *)calloc(1,sizeof(list));
newNode->next = NULL;
newNode->val = data;
return newNode;
}
/*头插节点*/
void insertNodebyHead(list *headNode,int *data,int num)
{
for(int i = 0; i < num; i++)
{
list *newNode = creatnode(*data);
data++;
newNode->next = headNode->next;
headNode->next = newNode;
}
}
/*返回倒数第k个节点*/
list *returnKnode(list *head,int n,int k)
{
if(k == 0)
return NULL;
int len = n-k+1;
list *pos = head;
while(len)
{
pos = pos->next;
len--;
}
return pos;
}
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF){
int nums[10002];
int k = 0;
list *_list = creatlist();
list *node;
for(int i = 0; i < n; i++)
{
scanf("%d",&nums[i]);
}
scanf("%d",&k);
int i = 0;
int j = n - 1;
int tmp;
while(i < j){ /*懒得写尾插法了,所以反转一下吧哈哈哈*/
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
insertNodebyHead(_list,nums,n);
node= returnKnode(_list,n,k);
if(node == NULL)
printf("0\n");
else
printf("%d\n",node->val);
}
return 0;
}
查看5道真题和解析