לדלג לתוכן

10.2 רשימה מקושרת ורקורסיה פתרון

רשימה מקושרת - מימוש

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, value) -> None:
        new_node = Node(value)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def prepend(self, value) -> None:
        new_node = Node(value)
        new_node.next = self.head
        self.head = new_node

    def delete(self, value) -> None:
        if not self.head:
            return
        if self.head.data == value:
            self.head = self.head.next
            return
        current = self.head
        while current.next:
            if current.next.data == value:
                current.next = current.next.next
                return
            current = current.next

    def print_list(self) -> None:
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")


ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.prepend(0)
ll.print_list()   # 0 -> 1 -> 2 -> 3 -> None
ll.delete(2)
ll.print_list()   # 0 -> 1 -> 3 -> None

רקורסיה - פיבונצ'י איטרטיבי

def fib_recursive(n: int) -> int:
    if n <= 1:
        return n
    return fib_recursive(n - 1) + fib_recursive(n - 2)


def fib_iterative(n: int) -> int:
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b


import time

n = 35
start = time.time()
print(fib_recursive(n))
print(f"recursive: {time.time() - start:.3f}s")

start = time.time()
print(fib_iterative(n))
print(f"iterative: {time.time() - start:.6f}s")

הגרסה האיטרטיבית מהירה בהרבה כי הרקורסיבית מחשבת את אותם ערכים שוב ושוב.

שאלות Leetcode

אין פתרון קוד כאן - פתרו בעצמכם ב-Leetcode. אם תקועים, קראו את הפתרון הרשמי ואז כתבו אותו מחדש בלי להסתכל.