您的位置:首页 > 理论基础

求一个链表中倒数第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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐