在不改變單鏈表的前提下,請查找鏈表中倒數第k(k爲整數)個位置的結點。
#include<stdio.h>
#include<stdlib.h>
struct Lnode
{
int data;
Lnode *next;
};
int Init(struct Lnode *L, int i)
{
struct Lnode *p;
struct Lnode *q=L;
int j=0;
while(j<i)
{
p = (struct Lnode *)malloc(sizeof(struct Lnode));
scanf("%d",&(p->data));
p->next =NULL;
q->next = p;
q= p;
j++;
}
return 0;
}
int findelem(struct Lnode *head, int k,int *i,int num)
{
if(head->next!=NULL)
{
k= findelem(head->next,k,i,++num);
if(k==1)
{
*i = head->data;
return --k;
}
else
return --k;
}
else
{
if(num<k)
{
printf("不存在倒數%d個元素",k);
return 0;
}
else
{
*i = head->data;
return --k;
}
}
}
int main()
{
struct Lnode Head;
struct Lnode *L=&Head;
L->next = NULL;
int j= 5;
Init(L,j);
int i,k;
printf("請輸入k的值:\t");
scanf("%d",&k);
findelem(L,k,&i,0);
printf("倒數第%d個元素是:%d",k,i);
return 0;
}