关于链表的倒数第k个结点的查找问题--考研题

来源:互联网 发布:1025实验室 知乎 编辑:程序博客网 时间:2024/06/05 19:51

加油,只要努力,就会有成果。

关于链表的一道题:

查找单链表的倒数第K个结点。

方法:设两个指针,一个指针先走k个结点,另一个指针从头开始走,当上一个指针走到末尾时,这个指针正好走到链表的倒数第k个结点。

实现代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
} ElemSN;
ElemSN *creatnode(int a[],int n)
{
ElemSN *h,*t,*p;
h=NULL;
int i;
for(i=0;i<n;i++)
{
p=(ElemSN *)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=NULL;
if(!h)
h=t=p;
else
t=t->next=p; 
}
return h;
}
int findlastkey(ElemSN *h,int k)
{
ElemSN *p,*q;
int i;
for(i=1,p=h;i<k;i++)
{
p=p->next;
}
for(q=h;p->next!=NULL;q=q->next,p=p->next);
return q->data;


int main(void)
{
ElemSN *h;
int a[6]={1,2,3,4,5,6},k;
h=creatnode(a,6);
printf("输入倒数第k个结点:");
scanf("%d",&k); 
printf("%d",findlastkey(h,k));
}






















原创粉丝点击