求一个链表中倒数第K个元素(2009年计算机硕士研究生全国入学考试统考大题第1题)

2014-11-24 12:04:00 · 作者: · 浏览: 1
#include
  
   
#include
   
     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; } }