Reverse the linked list--递归与迭代


Reverse the linked list–递归与迭代

本文以逆转单链表的例子解释递归与迭代


1.递归

递归就是 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。(百度百科)
总结:利用调用自身来不断缩小规模,直到达到退出条件,前提是,问题可以转化为相似的规模较小的问题,关键是退出条件设置。使用if….else…

2.迭代

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。(百度百科)
总结:循环结构,将同一个函数或者一些操作重复多次,(递归是迭代的一个特例,递归可以转换为迭代,迭代不一定能转化为递归)使用for,while

3.实例

使用迭代的方法,逆转一个单链表:

p1->p2->tmp
将p1赋值给p2.next,实现了p2的逆转,然后再将p1,p2,tmp分别往后面瞬移一步,这是逆转一个节点的操作,迭代多次,即可实现单链表的逆转。具体leetcode 代码如下:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        p1 = None
        p2 = head
        while(p2 is not None):
            tmp = p2.next
            p2.next = p1
            p1 = p2
            p2 = tmp
        return p1

使用递归的方法,逆转一个单链表:

思路:p1->p2->p3->p4,如果l1=p1->p2->p3,逆转l1->p4,如果l1是逆转的,逆转p4,即可逆转此单链表,以此类推再去处理l1,退出条件为p4->next=None

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head==None or head.next==None:
            return head
        p=ListNode(0)
        p=head
        head = self.reverseList(p.next)
        p.next.next = p
        p.next = None
        return head
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值