剑指Offer之反转链表
2013-11-21 10:17
483 查看
题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。
输出:
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
样例输入:
样例输出:
【解析】
【代码】
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。
输出:
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
样例输入:
5 1 2 3 4 5 0
样例输出:
5 4 3 2 1 NULL
【解析】
【代码】
/********************************* * 日期:2013-11-21 * 作者:SJF0115 * 题号: 题目1518:反转链表 * 来源:http://ac.jobdu.com/problem.php?pid=1518 * 结果:AC * 来源:剑指Offer * 总结: **********************************/ #include<iostream> #include <stdio.h> #include <malloc.h> #include <string.h> using namespace std; typedef struct ListNode{ int value; struct ListNode *next; }ListNode; ListNode* ReverseList(ListNode*head){ //容错处理 if(head == NULL){ return NULL; } else{ ListNode *p,*pre,*pnext; //带头节点的链表 pre = NULL; p = head->next; while(p != NULL){ pnext = p->next; //最后一个节点 if(pnext == NULL){ head = p; } p->next = pre; pre = p; p = pnext; } return head; } } int main() { int i,n; while(scanf("%d",&n) != EOF){ ListNode *head,*p,*pre; //创建链表 head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; pre = head; for(i = 0;i < n;i++){ p = (ListNode*)malloc(sizeof(ListNode)); scanf("%d",&p->value); p->next = NULL; pre->next = p; pre = p; } //无数据 if(n <= 0){ printf("NULL\n"); } //输出反转后数据 else{ //反转 head = ReverseList(head); //输出 p = head; while(p != NULL){ if(p->next == NULL){ printf("%d\n",p->value); } else{ printf("%d ",p->value); } p = p->next; } } } return 0; }
/********************************* * 日期:2013-11-21 * 作者:SJF0115 * 题号: 题目1518:反转链表 * 来源:http://ac.jobdu.com/problem.php?pid=1518 * 结果:AC * 来源:剑指Offer * 总结: **********************************/ #include<iostream> #include <stdio.h> #include <malloc.h> #include <string.h> using namespace std; typedef struct ListNode{ int value; struct ListNode *next; }ListNode; ListNode* ReverseList(ListNode*head){ //容错处理 if(head == NULL){ return NULL; } else{ ListNode *p,*pnext; //带头节点的链表 p = head->next; head->next = NULL; while(p != NULL){ pnext = p->next; p->next = head->next; head->next = p; p = pnext; } return head; } } int main() { int i,n; while(scanf("%d",&n) != EOF){ ListNode *head,*p,*pre; //创建链表 head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; pre = head; for(i = 0;i < n;i++){ p = (ListNode*)malloc(sizeof(ListNode)); scanf("%d",&p->value); p->next = NULL; pre->next = p; pre = p; } //无数据 if(n <= 0){ printf("NULL\n"); } //输出反转后数据 else{ //反转 head = ReverseList(head); //输出 p = head->next; while(p != NULL){ if(p->next == NULL){ printf("%d\n",p->value); } else{ printf("%d ",p->value); } p = p->next; } } } return 0; }
相关文章推荐
- 推荐一款好用的jquery弹出层插件——wbox
- bootstrap中的tooltip
- 五个你必须知道的javascript和web debug技术
- 前端文件优化方案
- javascript---处理图片翻转器
- 怎么用javascript做一个文字滚动效果?
- Paint方法setXfermode
- Vmware 安装 Fedora 18 注意事项
- 五个你必须知道的javascript和web debug技术
- css块元素的 display 属性 inline-block 的应用
- google对js延迟加载方案的建议
- Javascript style guide
- HTML简介
- web前端安全编码(模版篇)
- Visual Studio 2010扩展让JS与CSS实现折叠
- Start my programming life
- 【转】12种JavaScript MVC框架之比较
- 修改 PhpStorm 的字体和样式
- JSP获取EBS DB connection
- JS 中的 new 操作符