1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| class ListNode: def __init__(self, val=0, prev=None, next=None): self.val = val self.prev = prev self.next = next
class MyLinkedList: def __init__(self): self.head = None self.tail = None self.size = 0
def get(self, index: int) -> int: if index < 0 or index >= self.size: return -1 if index < self.size // 2: current = self.head for i in range(index): current = current.next else: current = self.tail for i in range(self.size - index - 1): current = current.prev return current.val
def addAtHead(self, val: int) -> None: new_node = ListNode(val, None, self.head) if self.head: self.head.prev = new_node else: self.tail = new_node self.head = new_node self.size += 1
def addAtTail(self, val: int) -> None: new_node = ListNode(val, self.tail, None) if self.tail: self.tail.next = new_node else: self.head = new_node self.tail = new_node self.size += 1
def addAtIndex(self, index: int, val: int) -> None: if index < 0 or index > self.size: return if index == 0: self.addAtHead(val) elif index == self.size: self.addAtTail(val) else: if index < self.size // 2: current = self.head for i in range(index - 1): current = current.next else: current = self.tail for i in range(self.size - index): current = current.prev new_node = ListNode(val, current, current.next) current.next.prev = new_node current.next = new_node self.size += 1
def deleteAtIndex(self, index: int) -> None: if index < 0 or index >= self.size: return if index == 0: self.head = self.head.next if self.head: self.head.prev = None else: self.tail = None elif index == self.size - 1: self.tail = self.tail.prev if self.tail: self.tail.next = None else: self.head = None else: if index < self.size // 2: current = self.head for i in range(index): current = current.next else: current = self.tail for i in range(self.size - index - 1): current = current.prev current.prev.next = current.next current.next.prev = current.prev self.size -= 1
|