Skip to content

Instantly share code, notes, and snippets.

@aolufisayo
Last active July 20, 2022 20:13
Show Gist options
  • Save aolufisayo/eb02cf3c1c5d4032059004c9babcdcb9 to your computer and use it in GitHub Desktop.
Save aolufisayo/eb02cf3c1c5d4032059004c9babcdcb9 to your computer and use it in GitHub Desktop.
Linked List python
class Node():
def __init__(self, value):
self.value = value
self.next = None
def __str__(self):
return str({"value": self.value, "next": self.next})
class LinkedList:
def __init__(self, value):
new_node = Node(value)
self.head = new_node
self.tail = new_node
self.length = 1
def print_list(self):
temp = self.head
while temp is not None:
print(temp.value)
temp = temp.next
def append(self, value):
new_node = Node(value)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
self.tail.next = new_node
self.tail = new_node
self.length += 1
def pop(self):
if self.length == 0:
return None
temp = self.head
pre = self.head
while (temp.next):
pre = temp
temp = temp.next
self.tail = pre
self.tail.next = None
self.length -= 1
if self.length == 0:
self.head = None
self.tail = None
return temp
def prepend(self, value):
new_node = Node(value)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
new_node.next = self.head
self.head = new_node
self.length += 1
return True
def pop_first(self):
if self.length == 0:
return None
temp = self.head
self.head = self.head.next
temp.next = None
self.length -= 1
if self.length == 0:
self.tail = None
return temp
def get(self, index):
if index < 0 or index >= self.length:
return None
temp = self.head
for _ in range(index):
temp = temp.next
return temp
def set_value(self, index, value):
temp = self.get(index)
if temp:
temp.value = value
return True
return False
def insert(self, index, value):
if index < 0 or index > self.length:
return False
if index == 0:
return self.prepend(value)
if index == self.length:
return self.append(value)
new_node = Node(value)
temp = self.get(index - 1)
new_node.next = temp.next
temp.next = new_node
self.length += 1
return True
def remove(self, index):
if index > 0 or index >= self.length:
return None
if index == 0:
return self.pop_first()
if index == self.length - 1:
return self.pop()
prev = self.get(index - 1)
temp = prev.next
prev.next = temp.next
temp.next = None
self.length -= 1
return temp
def reverse(self):
temp = self.head
self.head = self.tail
self.tail = temp
after = temp.next
before = None
for _ in range(self.length):
after = temp.next
temp.next = before
before = temp
temp = after
linked_list = LinkedList(4)
linked_list.append(7)
linked_list.print_list()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment