LeetCode-Reverse Linked List
2015-07-29 21:39
330 查看
继续一道链表的算法题,运用笨笨的方法实现了(不过却是8ms,不可思议)
然后找大神的博客看,发现了别人家的代码
(1)非递归版
此外还发现了用递归实现的更强版本(递归思想:层层进入最后一个节点,然后把前节点的指针付给后节点的指针)
(2)递归版本
本题用的递归实现要求记住
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { if(head == NULL) return NULL; else if(head->next == NULL) return head; else if(head->next->next == NULL) { head->next->next = head; head = head->next; head->next->next = NULL; return head; } else { ListNode *a, *b, *c, *pre, *current; pre = head->next; current = pre->next; a = pre; b = current; c = current->next; pre->next = head; head->next = NULL; while(current->next != NULL) { c = current->next; current->next = a; a = b; b = c; current = c; } current->next = a; head = b; return head; } } };
然后找大神的博客看,发现了别人家的代码
(1)非递归版
//Runtime:10 ms class Solution { public: ListNode* reverseList(ListNode* head) { if (head == NULL) return NULL; ListNode *pre = head; ListNode *cur = head->next; while (cur != NULL) { pre->next = cur->next; cur->next = head; head = cur; cur = pre->next; } return head; } };
此外还发现了用递归实现的更强版本(递归思想:层层进入最后一个节点,然后把前节点的指针付给后节点的指针)
(2)递归版本
//Runtime:10 ms class Solution{ public: ListNode* reverseList(ListNode* head){ //此处的条件不能写成if(head == NULL) if (head == NULL || head->next == NULL) return head; ListNode *newhead = reverseList(head->next); head->next->next = head; head->next = NULL; return newhead; } };
本题用的递归实现要求记住
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解