题目:206. 反转链表
题目描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
一、双指针
C++版本:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *slow=NULL;
ListNode *fast=head;
ListNode *temp;
while(fast!=NULL){
temp=fast->next;
fast->next=slow;
slow=fast;
fast=temp;
}
return slow;
}
};
Python版本:
class Solution(object):
def reverseList(self, head):
fast=head
slow=None
while fast!=None:
temp=fast.next
fast.next=slow
slow=fast
fast=temp
return slow
二、递归
C++版本:
class Solution {
public:
ListNode* recursive(ListNode* slow,ListNode* fast){
ListNode *temp;
if(fast==NULL) return slow;
temp=fast->next;
fast->next=slow;
// 可以和双指针法的代码进行对比,如下递归的写法,其实就是做了这两步
// slow=fast;
// fast=temp;
return recursive(fast,temp);
}
ListNode* reverseList(ListNode* head) {
return recursive(NULL,head);
}
};
Python版本:
class Solution(object):
def reverseList(self, head):
def recursive(slow,fast):
if fast==None:
return slow
temp=fast.next
fast.next=slow
return recursive(fast,temp)
return recursive(None,head)
总结
1.迭代中循环体中变量的更新操作往往对应于递归调用自身函数里传参
2.C++中的NULL对应于Python中None
欢迎大家扫码关注本人公众号:编程复盘与思考随笔
(关注后可以免费获得本人在csdn发布的资源源码)
公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!