单链表反转问题
来源:互联网 发布:win10 软件兼容 编辑:程序博客网 时间:2024/05/29 19:47
题目: 输入一个链表,反转链表后,输出链表的所有元素
我的解决思路:
首先遍历链表,将链表中的元素存入数组中。然后利用头插法建立链表的方式,将数组中的元素放入链表中。
第一次编程为:
ListNode* ReverseList(ListNode* pHead){ //pHead 为不带头结点的链表 int *a = new int[100];if(pHead == NULL){return NULL;}else{ListNode* L = pHead; int i = 0;while(L != NULL){a[i] = L->val; L = L->next; i++;}ListNode* q = (ListNode*)malloc(sizeof(ListNode));q->next = NULL;ListNode* s; int temp = 1;for(int j = 0; j<i; ++j){ if(temp == 1){ q->val = a[j]; temp = 0; } else{
// 利用尾插法建立链表 s = (ListNode*)malloc(sizeof(ListNode)); s->val = a[j]; s->next = q->next; q->next = s; } }delete []a;return q; }结果输出为:
第二天来了师弟帮我改好了。。。答案错误:您提交的程序没有通过所有的测试用例case通过率为0.00%测试用例:{1,2,3,4,5}对应输出应该为:{5,4,3,2,1}你的输出为:{1,5,4,3,2}结果发现每次链表中的第一个元素不能反转到最后。 花费了将近一天的时间寻找原因。。。。。(水平太菜),然后还没有找到。。。。。。
原因是 Phead为不带头结点的链标,第一个元素就会存到Phead中。
然而
s->next = q->nextq->next = s;这两句话是以q为头结点(q为带头结点的链表),每次在q的后面和第一个元素之间插入新的元素,所以导致每次那个1都在第一个位置。
进行改进:
s->next = q;q = s;这两句的意思是 以q为第一个元素,每次在q的前面插入元素。
这样就好啦!
下面是正确的源程序:
int *a = new int[100];if(pHead == NULL){return NULL;}else{ListNode* L = pHead;int i = 0;while(L != NULL){a[i] = L->val; L = L->next; i++;}ListNode* q = (ListNode*)malloc(sizeof(ListNode));q->next = NULL;ListNode* s; int temp = 1;for(int j = 0; j<i; ++j){ if(temp == 1){ q->val = a[j]; temp = 0; } else{ s = (ListNode*)malloc(sizeof(ListNode)); s->val = a[j]; s->next = q; q = s; } }//delete []a;return q; }输出结果:通过所有测试案例。
感悟:
- 程序中出现的每一个错误,都有章可循,一定能找到错误的根源!
- 遍历链表或者数组时,一定要注意边界。不要怕麻烦,细心分析,不能出现越界的现象。
- 我有个好师弟,哈哈!我的第一篇博文。坚持不懈,乐于分享!
1 0
- 单链表的反转问题
- 单链表反转问题
- 单链表反转问题
- 单链表反转问题
- 反转单链表问题
- 单链表操作-单链表反转问题?
- 单链表的反转问题测试
- 反转问题
- 反转问题
- 优先级反转问题
- 字符串反转系列问题
- 数据库行列反转问题
- RTOS优先权反转问题
- hibernate反转问题
- 优先级反转问题
- 单词反转问题
- 优先级反转问题
- 反转问题--poj1222
- 基本数据类型和字符串相互转换
- Ubuntu下图形界面卡死解决办法
- 2016蓝桥杯第九题
- 网易笔试题 奖学金
- USACO 2.1-The Castle
- 单链表反转问题
- Swift快速入门-swift基础语法和函数-最直观学习swift
- 10033---ArrayList的实现原理
- input文本框输入限制数字和小数位数
- 关系型数据库中的范式问题?
- 使用Spring Boot来加速Java web项目的开发
- 【HDU 4727 】【水题】The Number Off of FFF
- windows下创建并使用动态链接库(.dll)
- CentOS6.5 安装 Openresty