LeetCode: Reverse Linked Lis
2015-06-03 12:12
399 查看
Reverse a singly linked list.
click to show more hints.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
Iterative:
/**
* 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 head;
ListNode *pre = NULL;
while(head != NULL)
{
ListNode *next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
};
Recursive:
/**
* 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) {
recurse(head, NULL);
return newHead;
}
private:
void recurse(ListNode *node, ListNode *pre)
{
if(node == NULL)
return;
if(node->next == NULL)
newHead = node;
ListNode *next = node->next;
node->next = pre;
recurse(next, node);
}
ListNode *newHead;
};
click to show more hints.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
Iterative:
/**
* 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 head;
ListNode *pre = NULL;
while(head != NULL)
{
ListNode *next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
};
Recursive:
/**
* 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) {
recurse(head, NULL);
return newHead;
}
private:
void recurse(ListNode *node, ListNode *pre)
{
if(node == NULL)
return;
if(node->next == NULL)
newHead = node;
ListNode *next = node->next;
node->next = pre;
recurse(next, node);
}
ListNode *newHead;
};
相关文章推荐
- ElasticSearch硬件使用说明
- c++中:和::的用途
- Android中的Environment.getExternalStorageState使用
- 写了一个小闹钟
- 让自家系统瘫痪,这事我也干过
- CentOS下crontab 执行失败的原因有哪些?
- 升级到mac 10.10之后使用pod出现问题的解决方法
- 微软100题(66)用递归颠倒栈
- Java for LeetCode 136 Single Number
- 在网页中插入视频代码大全
- Page rank
- 网络编程之shutdown() 与 close()函数详解
- 下了个蓝屏代码查看工具,就中病毒了。。。什么鬼病毒,竟然还是用的VBS
- Spring整合Hibernate的时候使用hibernate.cfg.xml
- UIKit--UIAlertController
- Android Service详解
- mac中遇到的mysql编码问题
- iWatch 页面导航
- Unity Rigidbody
- jQuery中extend()和fn.extend()方法详解