Design Linked List
I did this Leetcode problem! Here is the code:
class ListNode: def __init__(self, val): self.val = val self.next = None self.prev = None class MyLinkedList(object): def __init__(self): self.left = ListNode(0) self.right = ListNode(0) self.left.next = self.right self.right.prev = self.left def get(self, index): """ :type index: int :rtype: int """ curr = self.left.next while curr and index > 0: curr = curr.next index -= 1 if curr and index == 0 and curr != self.right: return curr.val return -1 def addAtHead(self, val): """ :type val: int :rtype: None """ new_node = ListNode(val) next = self.left.next prev = self.left prev.next = new_node next.prev = new_node new_node.prev = prev new_node.next = next def addAtTail(self, val): """ :type val: int :rtype: None """ new_node = ListNode(val) next = self.right prev = self.right.prev prev.next = new_node next.prev = new_node new_node.prev = prev new_node.next = next def addAtIndex(self, index, val): """ :type index: int :type val: int :rtype: None """ curr = self.left.next while curr and index > 0: curr = curr.next index = index - 1 if curr and index == 0: new_node = ListNode(val) next = curr prev = curr.prev prev.next = new_node next.prev = new_node new_node.prev = prev new_node.next = next def deleteAtIndex(self, index): node = self.left.next while node and index > 0: node = node.next index -= 1 if node and node != self.right and index == 0: node.prev.next = node.next node.next.prev = node.prev # Your MyLinkedList object will be instantiated and called as such: # obj = MyLinkedList() # param_1 = obj.get(index) # obj.addAtHead(val) # obj.addAtTail(val) # obj.addAtIndex(index,val) # obj.deleteAtIndex(index)