定义
class MyLinkedList(object) 这个类,开始我以为是既要定义链表,又要在该类里写方法。但其实ListNode类是在外面定义的。如下:
class ListNode:
def __init__(self, nums = 0, next = None): # 记得要给初值
self.nums = nums
self.next = next
相当于, MyLinkedList(object) 这个类,是用来实现一系列list操作的。并没有规定链表的构造。
但是,我们在创建一个链表 myList 时,我们用的是:MyLinkedList myList = new MyLinkedList ,而不是直接创建一个单独的 ListNode 。至于给链表赋值啥的,用的都是 MyLinkedList 里的方法。
代码
class ListNode:
def __init__(self, nums=0, next=None):
self.nums = nums
self.next = next
class MyLinkedList(object):
def __init__(self):
self.dummy_head = ListNode()
self.size = 0
def get(self, index):
# 安全性检查
if index < 0 or index > self.size - 1:
return -1
cur = self.dummy_head
for i in range(0, index + 1):
cur = cur.next
return cur.nums
def addAtHead(self, val):
self.size += 1
self.dummy_head.next = ListNode(val, self.dummy_head.next)
def addAtTail(self, val):
self.size += 1
cur = self.dummy_head
while cur.next:
cur = cur.next
cur.next = ListNode(val, None)
def addAtIndex(self, index, val):
if index < 0 or index > self.size:
return -1
self.size += 1
new_node = ListNode(val, None)
cur = self.dummy_head
for i in range(0, index):
cur = cur.next
new_node.next = cur.next
cur.next = new_node
def deleteAtIndex(self, index):
if index < 0 or index >= self.size:
return -1
self.size -= 1
cur = self.dummy_head
for i in range(0, index):
cur = cur.next
cur.next = cur.next.next
问题
- 一定要做安全性检查,否则当索引超出规定时,会报错。
- 与索引有关的需求时,都会用到 dummy_head 。