求一个链表中倒数第K个元素(2009年计算机硕士研究生全国入学考试统考大题第1题)
2014-04-18 21:30
453 查看
#include<stdio.h> #include<stdlib.h> typedef struct Info { int data; struct Info *next; }Node,*pNode; int main() { void create(pNode); int find(pNode,int); void print(pNode); pNode link; link=(pNode)malloc(sizeof(Node)); printf("Enter numbers(input 0 to end).\n"); create(link); print(link); int k; printf("Please enter the position: "); scanf("%d",&k); printf("The last but %d number is :%d",k-1,find(link,k)); return 0; } void create(pNode head) { int n=0; pNode p,q; p=q=(pNode)malloc(sizeof(Node)); scanf("%d",&p->data); p->next=NULL; while(p->data!=0) { ++n; if(n==1) head->next=p; else q->next=p; q=p; p=(pNode)malloc(sizeof(Node)); scanf("%d",&p->data); p->next=NULL; } } int find(pNode head,int k) { int count=0; if(head==NULL)/*如果链表为空,则返回*/ return 0; pNode p=head->next; while(p!=NULL)/*遍历一遍链表,统计元素个数*/ { ++count; p=p->next; } printf("the count of numbers is:% d\n",count); if(k>=count)/*如果输入数字比元素个数大,则返回*/ return 0; k=count-k+1;/*计算倒数第k个元素在链表中是正数第几个*/ printf("the position of element is:%d\n",k); p=head; while(k--) p=p->next; return p->data; } void print(pNode head) { pNode p=head->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } }
相关文章推荐
- 查找一个单向链表中倒数第K个元素
- 找出一个无环单链表里面的倒数第K个元素,时间复杂度为O(n)
- 计算机:09年全国硕士入学考试统考备考攻略
- 2009年全国硕士研究生统一入学考试考生进入复试的初试成绩
- 用js实现输入一个链表,输出该链表中倒数第k个结点。
- 微软算法100道题------输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 查找链表中倒数第k个节点元素
- 输入一个链表,输出该链表中倒数第k个结点
- [转]2008年全国硕士研究生入学考试备战时间表
- 查找链表的倒数第k个元素
- 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- 输入一个链表,输出该链表中倒数第k个结点
- 输入一个链表,输出该链表中倒数第k个结点。
- 每天一算法(输出链表倒数第k个元素)
- 尾插法、头插法创建链表、链表反转、链表分段反转、查找链表倒数第k个元素,查找链表中间元素
- 2009年全国硕士研究生入学统一考试政治理论考试大纲(解析版)
- 微软面试之13 输入一个单向链表 输出该链表的倒数第k个节点
- 输入一个链表,找到倒数第K个节点。使得只扫描一次链表。