206. Reverse Linked List

来源:互联网 发布:淘宝情趣记事by欲晓 编辑:程序博客网 时间:2024/05/29 18:24

这里写图片描述
题目大意:
反转一个链表,要求分别用迭代和递归实现
Python代码:

# Definition for singly-linked list.class ListNode(object):    def __init__(self, x):        self.val = x        self.next = Noneclass Solution(object):    def reverseList(self, head):        """        :type head: ListNode        :rtype: ListNode        """        if head is None:            return None#         head, tail = self.reverseListRecursively(head)        head = self.reverseListIteratively(head)        return head    # 递归 52ms    def reverseListRecursively(self, head):            if head.next is None:            return head, head        h, p = self.reverseListRecursively(head.next)        p.next = head        head.next = None        return h, head     # 迭代 95ms -> 69ms    def reverseListIteratively(self, head):        p = head        q = p.next        if q is None:            return p        r = q.next        p.next = None        # 第一次写的迭代 95ms#         while q is not None:#             q.next = p#             p = q#             q = r#             if r is not None:#                 r = r.next        # 69ms        while r is not None:            q.next = p            p = q            q = r            r = r.next        q.next = p        return q

代码不难写,but AC后发现迭代的时间(95ms)要大于递归的时间(52ms)。按理说一般认为迭代的效率要优于递归,因为递归是自己调用自己,系统每次调用自己都需要分配空间,并把当前场景压栈,调用结束后还要释放空间,不仅浪费空间还浪费时间。可能是写得太渣了,so优化一下,优化后的时间为69ms,比优化前好些了。

0 0