I am currently stuck on Leetcode 707: Design a linked list, I think I have it mostly down but I am only passing 62/65 testcases. The problem seems to be with the deleteAtIndex function when I try to delete from index 0. I am using the 2 dummy doubly linked list approach. I thought my logic is correct, because if the index is already 0 it should skip the while loop and simply delete the first node correct? Except I tried testing it on my own and it does not work for some reason, maybe I am missing something simple? Any help would be great, thanks!
<code>class ListNode:
def __init__(self, val):
self.val = val
self.next = None
self.prev = None
class MyLinkedList:
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: int) -> int:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
return cur.val
else:
return -1
def addAtHead(self, val: int) -> None:
new_node = ListNode(val)
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
def addAtTail(self, val: int) -> None:
new_node = ListNode(val)
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
def addAtIndex(self, index: int, val: int) -> None:
new_node = ListNode(val)
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur == None:
return
if cur.val == 0 and cur.next == None:
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
elif cur.val == 0 and cur.prev == None:
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
else:
cur.prev.next = new_node
new_node.prev = cur.prev
cur.prev = new_node
new_node.next = cur
def deleteAtIndex(self, index: int) -> None:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
cur.prev.next = cur.next
cur.next.prev = cur.prev
</code>
<code>class ListNode:
def __init__(self, val):
self.val = val
self.next = None
self.prev = None
class MyLinkedList:
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: int) -> int:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
return cur.val
else:
return -1
def addAtHead(self, val: int) -> None:
new_node = ListNode(val)
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
def addAtTail(self, val: int) -> None:
new_node = ListNode(val)
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
def addAtIndex(self, index: int, val: int) -> None:
new_node = ListNode(val)
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur == None:
return
if cur.val == 0 and cur.next == None:
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
elif cur.val == 0 and cur.prev == None:
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
else:
cur.prev.next = new_node
new_node.prev = cur.prev
cur.prev = new_node
new_node.next = cur
def deleteAtIndex(self, index: int) -> None:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
cur.prev.next = cur.next
cur.next.prev = cur.prev
</code>
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
self.prev = None
class MyLinkedList:
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: int) -> int:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
return cur.val
else:
return -1
def addAtHead(self, val: int) -> None:
new_node = ListNode(val)
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
def addAtTail(self, val: int) -> None:
new_node = ListNode(val)
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
def addAtIndex(self, index: int, val: int) -> None:
new_node = ListNode(val)
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur == None:
return
if cur.val == 0 and cur.next == None:
before_end = self.right.prev
before_end.next = new_node
new_node.prev = before_end
self.right.prev = new_node
new_node.next = self.right
elif cur.val == 0 and cur.prev == None:
after_head = self.left.next
after_head.prev = new_node
new_node.next = after_head
self.left.next = new_node
new_node.prev = self
else:
cur.prev.next = new_node
new_node.prev = cur.prev
cur.prev = new_node
new_node.next = cur
def deleteAtIndex(self, index: int) -> None:
cur = self.left.next
while index > 0 and cur != None:
index -= 1
cur = cur.next
if cur != None and cur != self.right and index == 0:
cur.prev.next = cur.next
cur.next.prev = cur.prev