206. Reverse Linked List

    xiaoxiao2021-04-12  40

    题目大意: 反转一个链表,要求分别用迭代和递归实现 Python代码:

    # 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 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,比优化前好些了。

    转载请注明原文地址: https://ju.6miu.com/read-667825.html

    最新回复(0)