diff --git a/Answers/40130112086/.idea/.gitignore b/Answers/40130112086/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Answers/40130112086/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Answers/40130112086/.idea/40130112086.iml b/Answers/40130112086/.idea/40130112086.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/Answers/40130112086/.idea/40130112086.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Answers/40130112086/.idea/inspectionProfiles/profiles_settings.xml b/Answers/40130112086/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Answers/40130112086/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Answers/40130112086/.idea/misc.xml b/Answers/40130112086/.idea/misc.xml new file mode 100644 index 0000000..ee9fb45 --- /dev/null +++ b/Answers/40130112086/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Answers/40130112086/.idea/modules.xml b/Answers/40130112086/.idea/modules.xml new file mode 100644 index 0000000..44d9a3d --- /dev/null +++ b/Answers/40130112086/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Answers/40130112086/main.py b/Answers/40130112086/main.py new file mode 100644 index 0000000..a303310 --- /dev/null +++ b/Answers/40130112086/main.py @@ -0,0 +1,247 @@ +class Node: + def __init__(self,value ): + self.value = value + self.next = None + +class LinkedList: + def __init__(self): + self.head = None + self.size = 0 + + def insert_in_front(self, value): + new_node = Node(value) + if self.head is None: + self.head = new_node + else: + new_node.next = self.head + self.head = new_node + self.size += 1 + + def insert_in_back(self, value): + new_node = Node(value) + if self.head is None: + self.head = new_node + return + temp = self.head + while temp.next is not None: + temp = temp.next + temp.next = new_node + + self.size += 1 + + def delete_at_front(self): + if self.head is None: + return None + delete_value = self.head.data + self.head = self.head.next + return delete_value + + def delete_at_back(self): + if self.head is None: + return None + if self.head.next is None: + remove_value = self.head.data + self.head = None + return remove_value + while self.head.next.next is not None: + self.head = self.head.next + remove_value =self.head.next.data + self.head.next = None + return remove_value + + def search(self, value): + index = 0 + while self.head is not None: + if self.head.data == value: + return index + index += 1 + self.head = self.head.next + return -1 + + def clear(self): + self.head = None + self.size=0 + + def size(self): + count = 0 + while self.head is not None: + count += 1 + self.head = self.head.next + return count + + def print_forward(self): + result = [] + while self.head is not None: + result.append(str(self.head.data)) + self.head = self.head.next + print(" ".join(result)) + + def print_backward(self): + result = [] + while self.head is not None: + result.append(str(self.head.data)) + self.head = self.head.next + print(result[::-1]) + + def reverse_recursive(self, current=None, prev=None): + if self.head is None: + return + + if current is None: + current = self.head + + if current.next is None: + self.head = current + current.next = prev + return + + next_node = current.next + current.next = prev + self.reverse_recursive(next_node, current) + + def reverse_non_recursive(self): + prev = None + current = self.head + + while current is not None: + next_node = current.next + current.next = prev + prev = current + current = next_node + + self.head = prev +class Doublinklist: + def __init__(self, data): + self.data = data + self.prev = None + self.next = None + + +class DoublyLinkedList: + def __init__(self): + self.head = None + + def insert_in_front(self, value): + new_node = Doublinklist(value) + if self.head is None: + self.head = new_node + return + new_node.next = self.head + self.head.prev = new_node + self.head = new_node + + def insert_in_back(self, value): + new_node = Doublinklist(value) + if self.head is None: + self.head = new_node + return + while self.head is not None: + self.head = self.head.next + self.head.next = new_node + new_node.prev = self.head + + def delete_at_front(self): + if self.head is None: + return None + remove_value = self.head.data + self.head = self.head.next + if self.head is not None: + self.head.prev = None + return remove_value + + def delete_at_back(self): + if self.head is None: + return None + if self.head.next is None: + remove_value = self.head.data + self.head = None + return remove_value + while self.head.next is not None: + self.head = self.head.next + remove_value =self.head.data + self.head.prev.next = None + return remove_value + + def search(self, value): + index = 0 + while self.head is not None: + if self.head.data == value: + return index + index += 1 + self.head = self.head.next + return -1 + + def clear(self): + self.head = None + self.size=0 + + def size(self): + count = 0 + while self.head is not None: + count += 1 + self.head =self.head.next + return count + + def print_forward(self): + result = [] + while self.head is not None: + result.append(str(self.head.data)) + self.head = self.head.next + print(" ".join(result)) + + def print_backward(self): + result = [] + while self.head is not None: + result.append(str(self.head.data)) + self.head = self.head.next + print(result[::-1]) + + def reverse_recursive(self): + self.head = self._reverse_recursive(self.head) + + def _reverse_recursive(self, node): + if node is None or node.next is None: + return node + new_head = self._reverse_recursive(node.next) + node.next.next = node + node.next = None + return new_head + + def reverse_non_recursive(self): + prev = None + curr = self.head + while curr is not None: + next_node = curr.next + curr.next = prev + prev = curr + curr = next_node + self.head = prev + + def make_doubly(self, singlinked_list): + if singlinked_list.head is None: + return + self.head = Doublinklist(singlinked_list.head.data) + while singlinked_list.head.next is not None: + new_node = Doublinklist(singlinked_list.head.next.data) + self.head.next = new_node + new_node.prev = self.head + self.head = new_node + singlinked_list = singlinked_list.next + + def shift(self, num): + if self.head is None or num == 0: + return + size = self.size() + num %= size + if num < 0: + num += size + for i in range(num): + last_node = self.head + while last_node.next is not None: + last_node = last_node.next + last_node.next = self.head + self.head.prev = last_node + self.head = self.head.next + self.head.prev = None + last_node.next = None + diff --git a/Answers/How to.txt.txt b/Answers/How to.txt.txt deleted file mode 100644 index a4c6544..0000000 --- a/Answers/How to.txt.txt +++ /dev/null @@ -1,3 +0,0 @@ -put your answers in a folder. -rename that folder to your student number. -after finishing assignment, send a pull request to original repo \ No newline at end of file