求链式线性表的倒数第K项(两种方法,第二种较好)

求链式线性表的倒数第K项

题目

在这里插入图片描述

答案

第一种解法

这种方法是正常输入,然后将链表逆置,虽然pta是可以通过的(写数组应该都能通过),但明显没有下一种好

#include<stdio.h>
#include<malloc.h>
struct Node{
	int data;
	struct Node *next;
}; 
int main()
{
	struct Node *node,*temp,*p,*head,*older,*news;
	int count;
	node=(struct Node *) malloc(sizeof(struct Node));
	head=node;
	int n,t;
	scanf("%d",&n);
	while(1)
	{
		scanf("%d",&t);
		if(t<0) break;
		count++;
		temp=(struct Node *) malloc(sizeof(struct Node));
		temp->data=t;
		temp->next=NULL;
		node->next=temp;
		node=node->next;
	}
	if(count<n) 
	{
		printf("NULL");return 0;
	}
	head=head->next;
	news=NULL;
	older=head;
	while(older)
	{
		temp=older->next;
		older->next=news;
		news=older;
		older=temp;
	}
	count=0;
	while(1)
	{
		count++;
		if(count==n) 
		{
			printf("%d",news->data);return 0;
		}
		news=news->next;
	}
}

第二种解法(较好)

这种解法就是头插法,很简单,我参考了下面这篇文章
https://blog.csdn.net/lovecyr/article/details/90645982

#include<stdio.h>
#include<malloc.h>
struct Node{
	int data;
	struct Node *next;
};
int main()
{
	int k,t,i;
	scanf("%d",&k);
	struct Node *head,*p;
	head=(struct Node *)malloc(sizeof(struct Node));
	head->next=NULL;
	while(scanf("%d",&t)&&t>=0)
	{
		p=(struct Node *)malloc(sizeof(struct Node));
		p->data=t;
		p->next=head->next;
		head->next=p; 
	}
	for(i=0;i<k;i++)
	head=head->next;
	if(head) printf("%d",head->data);
	else printf("NULL");
}

注意

记得NULL的情况

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值