数组逆序重放(链表头插法练习)

简介: 传送门:http://ica.openjudge.cn/zz/1/总时间限制: 1000ms  内存限制: 65536kB描述将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。

传送门:http://ica.openjudge.cn/zz/1/

总时间限制: 1000ms  内存限制: 65536kB
描述
将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。
输入
输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔。
输出
输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
5
8 6 5 4 1
样例输出
1 4 5 6 8

分析:头插法构造链表,然后扫描链表即可。

带多余头结点的代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct obj
 4 {
 5     int num;
 6     struct obj *next;
 7 };
 8 int main(int argc, char *argv[])
 9 {
10     int n,i,t;
11     struct obj *head=NULL,*temp,*p;
12     
13     head=(struct obj *)malloc(sizeof(struct obj));
14     head->next=NULL;
15     scanf("%d",&n);
16     for(i=0;i<n;i++)
17     {
18         scanf("%d",&t);
19         temp=(struct obj *)malloc(sizeof(struct obj));
20         temp->num=t;
21         temp->next=NULL;
22         
23         temp->next=head->next;
24         head->next=temp;
25     }
26     p=head->next;
27     while(p!=NULL)
28     {
29         printf("%d ",p->num);
30         p=p->next;
31     }/**/
32     printf("\n");
33     return 0;
34 }

 

不带多余头结点的代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct obj
 4 {
 5     int num;
 6     struct obj *next;
 7 };
 8 int main(int argc, char *argv[])
 9 {
10     int n,i,t;
11     struct obj *head=NULL,*temp=NULL,*p=NULL;
12 
13     scanf("%d",&n);
14     for(i=0;i<n;i++)
15     {
16         scanf("%d",&t);
17         temp=(struct obj *)malloc(sizeof(struct obj));
18         temp->num=t;
19         temp->next=NULL;
20 
21         temp->next=head;
22         head=temp;
23     }
24 
25     p=head;
26     while(p!=NULL)
27     {
28         printf("%d ",p->num);
29         p=p->next;
30     }
31     printf("\n");
32     return 0;
33 }

 

相关文章
|
3月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
3月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
41 0
|
20天前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
23 0
|
28天前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
47 0
|
1月前
|
存储 Java 程序员
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
30 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
18 0
|
2月前
|
存储
数组与链表有什么区别
数组与链表有什么区别
|
3月前
|
存储 人工智能 测试技术
每日练习之排序——链表的合并;完全背包—— 兑换零钱
每日练习之排序——链表的合并;完全背包—— 兑换零钱
24 2
|
3月前
|
存储
2.顺序表_链表(附练习)
2.顺序表_链表(附练习)
|
3月前
|
存储 算法 Java
数组与链表
数组与链表