链表的反转-西电数据结构上机题

说明:

由于本人能力有限,文章难免有问题,希望各位大神不吝赐教,共同进步!

标题:链表的反转

问题描述:

问题描述
输入一个链表,反转链表后,输出链表的所有元素。

输入说明:

输入第一行为整数n(n>=1),代表测试链表数。
从第二行开始每行表示一个链表,其中第一个数据表示链表中数据个数,其余数据表示要测试的链表中的数据,均为整数。

输出说明:

每一行对应一个链表反转后的元素。

输入样例:

3
5 1 2 3 4 5
3 2 4 5
1 3

输出样例

5 4 3 2 1
5 4 2
3

解题思路:

简单的链表题,可以有多种实现方式,下面仅写出一种实现,实现思路见代码。

C代码实现:

#include "stdio.h"
#include "malloc.h"
#include "string.h"

typedef struct linkList
{
	int a;
	struct linkList *next;
} list;

list *initialization (int R)
{
	list *hand,*q,*e;
	int a,i,j,k;
	hand=(list*)malloc(sizeof(list));
	q=hand;
	for(i=0;i<R;i++)
	{
		scanf("%d",&a);
		e=(list *)malloc(sizeof(list));
		e->a=a;
		q->next=e;
		q=e;		
	}
	q->next=NULL;
	return hand;
}//链表的初始化 

void reverseList(list * head){
    if(head->next == NULL)
        printf("error input!");
    //判断输入是否正确 
    list *p = head->next;
    list *p1 = p->next;
    //指针遍历 
    while(p->next != NULL){
        p->next = p1->next;
        p1->next = head->next;
        head->next = p1;
        p1 = p->next;
    }
}//链表反转的核心代码 


void printf(list *hand) //遍历整个链结构,输出结果 
{
    list *q=hand->next;
    while(q!=NULL) 
    {
        printf("%d",q->a);
        if(q->next!=NULL) printf(" ");
        q=q->next;
    }
}

int main()
{
	int j,i,k;
    scanf("%d",&j);
    list *L[j];
    for(i=0;i<j;i++)
    {
    	scanf("%d",&k);
    	L[i]=initialization(k);
    	reverseList(L[i]);
	}
    for(i=0;i<j;i++)
    {
    	printf(L[i]);
    	if(i!=j-1) printf("\n");
	}
    return 0;
}

总结:

这是简单的链表型题目,至少有两三种实现方式,希望同学们多多练习,链表可是机考最基础的题目!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值