递归地翻转一个链表
2013-12-14 20:24
232 查看
手法非常巧妙,值得细细品味。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *reverseList(ListNode *head) {
if (head == NULL || head->next == NULL)
return head;
ListNode *head_next = head->next;
ListNode *ret = reverseList(head->next);
head_next->next = head;
head->next = NULL;
return ret;
}
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *reverseList(ListNode *head) {
if (head == NULL || head->next == NULL)
return head;
ListNode *head_next = head->next;
ListNode *ret = reverseList(head->next);
head_next->next = head;
head->next = NULL;
return ret;
}
相关文章推荐
- 用递归和非递归两种方法翻转一个链表
- 用递归和非递归两种方法翻转一个链表
- c语言,递归翻转一个单链表,c实现单链表
- 递归实现合并两个有序链表成一个链表依然有序
- 翻转链表-递归和迭代
- 链表翻转的递归和非递归算法
- 两有序链表合并为一个--递归与非递归两种方式
- 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
- 单链表递归和非递归两种翻转方法(手写链表)
- 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
- 131. 一个链表的结点结构,合并非递归和递归
- 续:一个带头结点的单链表反转(递归)
- 链表操作(将两个链表合并成一个链表依然有序,非递归方法和迭代方法)
- CPP一个链表,数据的增删改查(不包括翻转、排序,合并等)等,Node* &的使用
- 链表翻转。比如给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5
- 单链表翻转(递归与非递归)
- 翻转链表-迭代和递归双版本
- LintCode-翻转一个链表
- 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5。
- 用递归的方法翻转一个栈