赞
踩
【题目描述】
从键盘输入n个数字(n<100),组成一个链表。将此链表反序之后输出。
【输入描述】
输入包括两行,第一行1个数字n,表示要输入的数字的个数,第二行有连续n个数字
【输出描述】
输出只有一行,有n个反序后的数字,每个数字之间用一个空格间隔
【输入样例】
8
4 5 7 8 1 2 3 6
【输出样例】
6 3 2 1 8 7 5 4
代码实现
#include <stdio.h>
#include<stdlib.h>
struct ListNode{
int pos;
struct ListNode *next;
};
//读入n个整数,构成链表
struct ListNode* CreatLink(int n)
{
int i;
struct ListNode *p1,*p2,*head=NULL;
for(i=1;i<=n;i++)
{
p1=(struct ListNode*)malloc(sizeof(struct ListNode));
scanf("%d",&p1->pos);
if(i==1) head=p1;
else p2->next=p1;
p2=p1;
}
p2->next=NULL;
return head;
}
//输出链表
void PrintLink(struct ListNode* head)
{
while(head->next!=NULL)
{
printf("%d ",head->pos);
head=head->next;
}
printf("%d",head->pos);
}
//将链表逆序反转
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode *p1=head,*p=head,*head2=NULL;
while(p->next!=NULL)
{
p=p->next;
p1=p;
}
head2=p1;
while(head->next!=NULL)
{
p=head;
while(p->next!=p1)p=p->next;
p1->next=p;
p1=p;
p1->next=NULL;
}
return head2;
}
int main()
{
int n;
struct ListNode *p;
scanf("%d",&n);
p=CreatLink(n);
p=reverseList(p);
PrintLink(p);
return(0);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。