题目描述:
反转一个单链表。
我的解题:
先了解迭代和递归是什么。
迭代:对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止
递归:一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
上述内容来自百度百科,简单可以把迭代理解为环形,递归理解为树形。
1.迭代方法
a指针指向现在已经翻转的子链表的第一个结点
b指针指向需要处理的结点
/**
* 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) {
ListNode *a=NULL;
ListNode *b=head;
while(b){
ListNode *c=b->next;
b->next=a;
a=b;
b=c;
}
return a;
}
};
2.递归方法:
这个方式没想出来,参考网上大神的
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode *a=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return a;
}
};