题目:
python代码:
class MyLinkedList:
def __init__(self):
self.dummy_head = ListNode()
self.size = 0
def get(self, index: int) -> int:
if index < 0 or index >= self.size:
return -1
curr = self.dummy_head
for i in range(index + 1):
curr = curr.next
return curr.val
def addAtHead(self, val: int) -> None:
newNode = ListNode(val)
newNode.next = self.dummy_head.next
self.dummy_head.next = newNode
self.size += 1
def addAtTail(self, val: int) -> None:
curr = self.dummy_head
while curr.next:
curr = curr.next
newNode = ListNode(val)
curr.next = newNode
self.size += 1
def addAtIndex(self, index: int, val: int) -> None:
if index > self.size:
return
elif index < 0:
return
else:
curr = self.dummy_head
for i in range(index):
curr = curr.next
newNode = ListNode(val)
newNode.next = curr.next
curr.next = newNode
self.size += 1
def deleteAtIndex(self, index: int) -> None:
if index < 0 or index >= self.size:
return
else:
curr = self.dummy_head
for i in range(index):
curr = curr.next
curr.next = curr.next.next
self.size -= 1
# 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)
DEBUG:
1、设置self.size为了方便跟踪链表的长度
2、设置虚拟头节点
3、get函数中遍历的是range(index + 1),range遍历的是0到index
4、addAtIndex中循环遍历的是range(index),因为要用到加入位置的前一个节点
5、deleteAtIndex中循环遍历的是range(index),因为要用删除位置的前一个节点
6、不知道if可以不可以换成while循环,据说可以,保留。
def get(self, index: int) -> int:
"""
Get the value of the index-th node in the linked list. If the index is invalid, return -1.
"""
if index < 0 or index >= self.size:
return -1
current = self.head.next
count = 0
while count < index:
current = current.next
count += 1
return current.val