题解 | #输出单向链表中倒数第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; }