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