剑指offer--面试题22:链表中倒数第k个节点

#include<stdio.h>
#include<malloc.h>
   
typedef struct LNode
{
    int           data;
    struct LNode  *next;
}*LinkList;

LinkList Create_List_Tail(int length)
{//建立链表
	LNode *L,*s,*r;  //L指向头结点,r指向尾结点,s指向新添加结点
	L=(LinkList)malloc(sizeof(LNode));
	L->next =NULL;//头结点L->data不存东西
	r=L;
	for(int i=0;i<length;++i)
	{
		s=(LinkList)malloc(sizeof(LNode));
		scanf("%d",&s->data);
		r->next =s;
		r =s;
	}
	r->next =NULL;
	return L;  //返回链表
}
LNode *Find_KthToTail(LinkList L, unsigned int k)  
{  
    if (L->next  == NULL || k == 0)  
        return NULL;   
	
    LNode *p1 = L->next;   
	for(unsigned int i=0;i<k-1;++i)
	{
		if(p1->next !=NULL)
			p1=p1->next ;
		else
			return NULL;
	}
    
   LNode *p2 =L->next ;
   while(p1->next !=NULL)
   {
	   p1=p1->next ;
	   p2=p2->next ;
   }
   return p2; 
}  

int main()  
{  
	int length,k;
	printf("请输入链表长度:");
	scanf("%d",&length);
    LinkList L= Create_List_Tail(length); 

	printf("请输入倒数第几个数字:\n");
	scanf("%d",&k);
    LNode *p = Find_KthToTail(L,k);  
    printf("输出倒数第%d个:%d\n",k,p->data);
    return 0;  
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值