defget(self, index): # 需要考虑index的合法性,主要体现在小于0和大于等于size以及size为0的情况 """ :type index: int :rtype: int """ current = self.dummy_head.next# 直接让指针等于头节点即可 while current.next: # 可以通过for _ in range(index):来找到index位置的节点,并返回val if current.index == index: return current.val else: current = current.next
return -1
defaddAtHead(self, val): # 在头部添加新节点同样很简单,只需要创建一个新节点对象,然后将对象的next指向头节点就行了,注意size++ """ :type val: int :rtype: None """ head = NodeList(val, self.head, 0) head = self.dummy_head.next head.next = self.head current = head i = 0 while current.next: current = current.next i += 1 current.index = i
self.size += 1
defaddAtTail(self, val): # 在尾部添加则是通过size找到最后一个节点,然后创建一个新节点对象,让最后一个节点的next指向它,size++ """ :type val: int #还得注意如果size是0,那就是添加头节点 :rtype: None """ current = self.dummy_head.next i = 0 while current.next: current = current.next i += 1
classSolution(object): defreverseList(self, head): """ :type head: Optional[ListNode] :rtype: Optional[ListNode] """ current = head if current == None: return# 这里不能空,而是None elif current.next == None: return current
else: dummy_head = ListNode(0, current) while current.next: current = current.next
while current != head: current = current.next# 这里并不会反转链表 return current
classSolution(object): defswapPairs(self, head): """ :type head: Optional[ListNode] :rtype: Optional[ListNode] """ current = head
if current == None: # 首先不需要这样,直接判断head是否为none和head.next是否为none就可以知道链表节点数是否为2个以下 returnNone if current.next == None: return current if current.next.next ==None: tmp = current current = current.next current.next = tmp return current while current: # current 和 current.next都不为none才继续循环,保证有两个节点可以交换 a = current.next.next prev = current current = current.next current.next = prev current.next.next = a current = current.next