Reverse Linked List
2016-01-08 20:41
387 查看
最开始我想到的是用先遍历链表,把元素存入数组中,然后反向遍历数组在重新生成一个链表。首先判断当链表没有节点,或只有一个节点的时候,反转后还是它本身,直接返回头节点。在leetcode提交的runtime是8ms代码如下:
<span style="font-size:18px;"> ListNode* reverseList(ListNode* head) { ListNode *tmp=NULL,*res = NULL,*dummy = new ListNode(0); vector<int> v; tmp = head; res = dummy; if(head == NULL || head->next == NULL) return head; while(tmp != NULL) { v.push_back(tmp->val); tmp = tmp->next; } for(int i = v.size()-1;i>=0;i--) { ListNode* t = new ListNode(0); t->val = v[i]; dummy->next = t; dummy = dummy->next; } return res->next; }</span>然后看到DIscuss里面还有一种是原址的,只需要O(1)个额外空间,比较巧妙,只需要遍历一次即可。但是leetcode提交的是20ms,代码如下:
ListNode* reverseList(ListNode* head) { ListNode *it,*pre=NULL,*temp; it = head; if(it == NULL || it->next == NULL) return head; while(it) { temp = it->next; it->next = pre; pre = it; it = temp; } return pre; }
相关文章推荐
- 最小化安装CentOS7,没有ifconfig命令---yum search command_name搜索未知包名
- 关于芯片的封装
- hdoj2035人见人爱A^B
- 【原创】开发Kafka通用数据平台中间件
- 《VR入门系列教程》之6---VR硬件介绍及DK1
- Caisa and Sugar
- 博客导航——一站式搜索(所有博客的汇总帖)
- Leetcode224: Sudoku Solver
- 《VR入门系列教程》之5---应用方向
- 博客导航——一站式搜索(所有博客的汇总帖)
- 使用key验证方式登录ssh
- 母函数应用之整数分解
- 指针数组实现冒泡排序
- NSDictionary和NSMutableDictionary
- Android学习之AsyncTask和AsyncTaskLoader
- iOS 学习--网页视图知识点
- solr 5.3.1 源码 阅读 - 2
- Java中的SSH框架之struts2
- SAN和NAS的区别
- LaTeX编译出现错误?