单链表反转
2016-04-12 21:03
246 查看
问题很简单,只要你静下心来想,很容易实现,中间逻辑不弄错就行
所以这里我们就不画图来解释了
首先,我们用
也就是说
接下来我们继续:
存储当前节点(第一个)的next,当前节点(第一个)指向第三个(第二个的next),第二个指向(表头的next)变为链表首,表头指向第二个(之前存储的当前节点(第一个)的next)
假设我们的链表是这样的:
一次变化后:
二次变化后:
三次变化后:
四次变化后:
ok!完成了
也就是每次把当前节点的后面一个提到最前面去
循环一遍就行了
除此之外,暴力一点的方式就直接整一个新的链表,倒序重新存一遍就行了。。
总之,要么时间换空间,要么空间换时间,具体情况具体分析
所以这里我们就不画图来解释了
首先,我们用
current,
nextNode,
third分别表示
当前节点,
当前节点的下一个节点,
相对于当前节点的下下一个节点
也就是说
nextNode = current->next; third = nextNode->next;
接下来我们继续:
存储当前节点(第一个)的next,当前节点(第一个)指向第三个(第二个的next),第二个指向(表头的next)变为链表首,表头指向第二个(之前存储的当前节点(第一个)的next)
假设我们的链表是这样的:
begin->1->2->3->4->5->end
一次变化后:
begin->2->1->3->4->5->end
二次变化后:
begin->3->2->1->4->5->end
三次变化后:
begin->4->3->2->1->5->end
四次变化后:
begin->5->4->3->2->1->end
ok!完成了
也就是每次把当前节点的后面一个提到最前面去
伪代码如下:
current = L->next; while(current) { tmp = current->next; current->next = nextNode->next; nextNode->next = L->next; L->next = tmp; }
循环一遍就行了
除此之外,暴力一点的方式就直接整一个新的链表,倒序重新存一遍就行了。。
总之,要么时间换空间,要么空间换时间,具体情况具体分析
相关文章推荐
- 随机梯度下降
- 数论之最大公约数和最小公倍数
- ViewPager导航图片——简单实现方法
- 基于Solr的空间搜索学习笔记
- codeforces 569A A. Music(水题)
- 今天我装Ubuntu啦
- 四、s3c2440 裸机开发 通用异步收发器UARN
- DFS与BFS
- SQL优化(五) PostgreSQL (递归)CTE 通用表表达式
- win764位下qt开发中配置openssl库·
- poj 1269 Intersecting Lines
- 【计服15】实验三参考代码
- 正则表达式基础入门学习http://deerchao.net/tutorials/regex/regex.htm
- 利用Disk Genius分区工具给电脑硬盘进行分区详细图文教程
- Win32多线程程序设计读书笔记
- 《Linux内核设计与实现》第四章学习笔记
- BZOJ3569: DZY Loves Chinese II
- 2016CVTE编程题:兔子藏洞
- 128 Largest Number (自定义比较函数排序)
- 继承 this与super