单链表反转,要求空间复杂度O(1)
2015-10-28 12:43
288 查看
这是一道笔试题:
给你一个指向单链表表头的指针,要你把整个链表反转,并且空间复杂度为O(1),最后返回指向新的链表头的指针。链表节点结构和函数头已给出:
分析:
基础题,空间复杂度O(1)意味着不能复制一个临时链表出来,必须在原链表上直接操作。However,就算题目不要求空间复杂度O(1),我相信也不会有人舍近求远去建立一个临时链表。
代码:
给你一个指向单链表表头的指针,要你把整个链表反转,并且空间复杂度为O(1),最后返回指向新的链表头的指针。链表节点结构和函数头已给出:
struct LinkNode { int data; LinkNode *next; }; LinkNode* ReverseLink(LinkNode *head) { }
分析:
基础题,空间复杂度O(1)意味着不能复制一个临时链表出来,必须在原链表上直接操作。However,就算题目不要求空间复杂度O(1),我相信也不会有人舍近求远去建立一个临时链表。
代码:
LinkNode* ReverseLink(LinkNode *head) { LinkNode *nowHead = head, *sourceLink = head->next, *tempNode = NULL; while (sourceLink != NULL) { tempNode = sourceLink; // 把源链表首节点取出 sourceLink = sourceLink->next; // 源链表首节点后移 tempNode->next = nowHead; // 取出的节点接在目标链表的首部 nowHead = tempNode; // 目标链表首部更改为新的节点 } head->next = NULL; // 别忘了把原先的链表头指向NULL return nowHead; }
相关文章推荐
- [C/C++]反转链表
- 动易2006序列号破解算法公布
- C#实现基于链表的内存记事本实例
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构揭秘一
- C#定义并实现单链表实例解析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 数据结构之Treap详解
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法