Loading 2024/03/linkedlist-cv-14h.py 0 → 100644 +71 −0 Original line number Diff line number Diff line class Node: def __init__(self, data:any): self.data = data self.next = None def __str__(self): return str(self.data) class LinkedList: def __init__(self) -> None: self.head = None def add_at_begin(self, data): new_node = Node(data) new_node.next = self.head self.head = new_node def __str__(self) -> str: current_node = self.head result = '' while current_node != None: result += str(current_node.data) + ' -> ' current_node = current_node.next return result + 'None' def remove_at_begin(self) -> any: if self.head == None: return None data = self.head.data self.head = self.head.next return data def find(self, index:int) -> Node: if self.head == None: return None if index == 0: return None pos = 0 current_node = self.head while current_node and pos + 1 < index: pos += 1 current_node = current_node.next return current_node def remove_at_index(self, index:int) -> any: current_node = self.find(index) if index==0: return self.remove_at_begin() if current_node==None or current_node.next == None: return None data = current_node.next.data current_node.next = current_node.next.next return data ll = LinkedList() ll.add_at_begin(1) ll.add_at_begin("Ahoj") ll.add_at_begin(3) print(ll) print(ll.find(0)) print(ll.find(1)) print(ll.find(2)) print(ll.remove_at_index(0)) print(ll) No newline at end of file 2024/03/linkedlist-cv-16h.py 0 → 100644 +104 −0 Original line number Diff line number Diff line class Node: def __init__(self, data) -> None: self.data = data self.next = None def __str__(self) -> str: return str(self.data) class LinkedList: def __init__(self) -> None: self.head = None def add_at_begin(self, data) -> None: new_node = Node(data) new_node.next = self.head self.head = new_node # def __str__(self) -> str: # current_node = self.head # result = '[ ' # while current_node!=None: # result = result + str(current_node) + ' -> ' # current_node = current_node.next # return result + 'None ]' def __str__(self) -> str: result = '[ ' for x in self: result += str(x) + ' -> ' return result + 'None ]' def remove_at_begin(self) -> any: if not self.head: #if self.head == None return None data = self.head.data self.head = self.head.next return data def find(self, index:int) -> tuple[Node, Node]: if index<0: return None, None if not self.head: return None, None pos = 0 current_node = self.head prev_node = None while current_node and pos<index: pos += 1 prev_node = current_node current_node = current_node.next return prev_node, current_node def remove_at_index(self, index:int) -> any: prev, current = self.find(index) if current==None: return None if prev==None: return self.remove_at_begin() data = current.data prev.next = current.next return data def insert_at_index(self, data, index) -> None: prev, current = self.find(index) if prev and not current: new_node = Node(data) prev.next = new_node return None if current==None: return None if prev==None: self.add_at_begin(data) return None new_node = Node(data) new_node.next = current prev.next = new_node def __iter__(self): current_node = self.head while current_node: yield current_node current_node = current_node.next ll = LinkedList() ll.add_at_begin(10) ll.add_at_begin("Ahoj") ll.add_at_begin(1.5) print(ll) ll.insert_at_index("ABC", 3) print(ll) for x in ll: print(x) Loading
2024/03/linkedlist-cv-14h.py 0 → 100644 +71 −0 Original line number Diff line number Diff line class Node: def __init__(self, data:any): self.data = data self.next = None def __str__(self): return str(self.data) class LinkedList: def __init__(self) -> None: self.head = None def add_at_begin(self, data): new_node = Node(data) new_node.next = self.head self.head = new_node def __str__(self) -> str: current_node = self.head result = '' while current_node != None: result += str(current_node.data) + ' -> ' current_node = current_node.next return result + 'None' def remove_at_begin(self) -> any: if self.head == None: return None data = self.head.data self.head = self.head.next return data def find(self, index:int) -> Node: if self.head == None: return None if index == 0: return None pos = 0 current_node = self.head while current_node and pos + 1 < index: pos += 1 current_node = current_node.next return current_node def remove_at_index(self, index:int) -> any: current_node = self.find(index) if index==0: return self.remove_at_begin() if current_node==None or current_node.next == None: return None data = current_node.next.data current_node.next = current_node.next.next return data ll = LinkedList() ll.add_at_begin(1) ll.add_at_begin("Ahoj") ll.add_at_begin(3) print(ll) print(ll.find(0)) print(ll.find(1)) print(ll.find(2)) print(ll.remove_at_index(0)) print(ll) No newline at end of file
2024/03/linkedlist-cv-16h.py 0 → 100644 +104 −0 Original line number Diff line number Diff line class Node: def __init__(self, data) -> None: self.data = data self.next = None def __str__(self) -> str: return str(self.data) class LinkedList: def __init__(self) -> None: self.head = None def add_at_begin(self, data) -> None: new_node = Node(data) new_node.next = self.head self.head = new_node # def __str__(self) -> str: # current_node = self.head # result = '[ ' # while current_node!=None: # result = result + str(current_node) + ' -> ' # current_node = current_node.next # return result + 'None ]' def __str__(self) -> str: result = '[ ' for x in self: result += str(x) + ' -> ' return result + 'None ]' def remove_at_begin(self) -> any: if not self.head: #if self.head == None return None data = self.head.data self.head = self.head.next return data def find(self, index:int) -> tuple[Node, Node]: if index<0: return None, None if not self.head: return None, None pos = 0 current_node = self.head prev_node = None while current_node and pos<index: pos += 1 prev_node = current_node current_node = current_node.next return prev_node, current_node def remove_at_index(self, index:int) -> any: prev, current = self.find(index) if current==None: return None if prev==None: return self.remove_at_begin() data = current.data prev.next = current.next return data def insert_at_index(self, data, index) -> None: prev, current = self.find(index) if prev and not current: new_node = Node(data) prev.next = new_node return None if current==None: return None if prev==None: self.add_at_begin(data) return None new_node = Node(data) new_node.next = current prev.next = new_node def __iter__(self): current_node = self.head while current_node: yield current_node current_node = current_node.next ll = LinkedList() ll.add_at_begin(10) ll.add_at_begin("Ahoj") ll.add_at_begin(1.5) print(ll) ll.insert_at_index("ABC", 3) print(ll) for x in ll: print(x)