1class MyLinkedList:
2 def __init__(self):
3 self.head = None
4 self.size = 0
5
6 def get(self, index: int) -> int:
7 if index < 0 or index >= self.size:
8 return -1
9 cur = self.head
10 for _ in range(index):
11 cur = cur.next
12 return cur.val
13
14 def addAtHead(self, val: int) -> None:
15 node = ListNode(val)
16 node.next = self.head
17 self.head = node
18 self.size += 1
19
20 def addAtTail(self, val: int) -> None:
21 node = ListNode(val)
22 if not self.head:
23 self.head = node
24 else:
25 cur = self.head
26 while cur.next:
27 cur = cur.next
28 cur.next = node
29 self.size += 1
30
31 def addAtIndex(self, index: int, val: int) -> None:
32 if index < 0 or index > self.size:
33 return
34 if index == 0:
35 self.addAtHead(val)
36 return
37 cur = self.head
38 for _ in range(index - 1):
39 cur = cur.next
40 node = ListNode(val)
41 node.next = cur.next
42 cur.next = node
43 self.size += 1
44
45 def deleteAtIndex(self, index: int) -> None:
46 if index < 0 or index >= self.size:
47 return
48 if index == 0:
49 self.head = self.head.next
50 self.size -= 1
51 return
52 cur = self.head
53 for _ in range(index - 1):
54 cur = cur.next
55 cur.next = cur.next.next
56 self.size -= 1