Design Linked List
class ListNode:
def __init__(self, val, link):
self.val = val
self.link = link
class MyLinkedList:
def __init__(self):
self.head = None
self.size = 0
def get(self, index):
if index in range(self.size):
temp = self.head
for _ in range(index):
temp = temp.link
return temp.val
return -1
def addAtHead(self, val):
self.head = ListNode(val, self.head)
self.size += 1
def addAtTail(self, val):
if not self.head:
self.head = ListNode(val, None)
self.size += 1
return
temp = self.head
while temp and temp.link:
temp = temp.link
temp.link = ListNode(val, None)
self.size += 1
def addAtIndex(self, index, val):
if index not in range(1 + self.size):
return
elif index == 0:
self.head = ListNode(val, self.head)
self.size += 1
return
else:
temp = self.head
for _ in range(index - 1):
temp = temp.link
temp.link = ListNode(val, temp.link)
self.size += 1
def deleteAtIndex(self, index):
if index in range(self.size):
if index == 0:
self.head = self.head.link
self.size -= 1
return
temp = self.head
for _ in range(index - 1):
temp = temp.link
temp.link = temp.link.link
self.size -= 1