classSolution: defremoveElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]: while head and head.val == val : head = head.next current = head while current and current.next: while current.nextand current.next.val == val: current.next = current.next.next current = current.next return head
classSolution: defremoveElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]: current = head while current and current.next: if current.val == val: head = current.next if current.next.val == val: current.next = current.next.next else : current = current.next return head
设计链表
题意: 在链表类中实现这些功能:
get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
classListNode: def__init__(self,val=0,next=None): self.val = val self.next = next classMyLinkedList: def__init__(self): self.dummy_node = ListNode() self.size = 0
defget(self, index: int) -> int: if index >= self.size or index < 0: #为啥不能取等,类似数组下标从零开始 return -1 current = self.dummy_node.next# 有效节点从虚拟节点下一个开始 for i inrange(index):#这里循环用来找目标,链表的查找是要遍历的,不像数组用下标就行 current = current.next return current.val
defaddAtTail(self, val: int) -> None: current = self.dummy_node while current.next: current = current.next current.next = ListNode(val) self.size += 1
defaddAtIndex(self, index: int, val: int) -> None: if index < 0or index > self.size: return -1 current = self.dummy_node for i inrange(index): current = current.next current.next = ListNode(val,current.next) self.size += 1
defdeleteAtIndex(self, index: int) -> None: if index < 0or index >= self.size: return current = self.dummy_node for i inrange(index): current = current.next current.next = current.next.next self.size -= 1
classSolution: defreverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: pre = None current = head while current: temp = current.next current.next = pre pre = current current = temp return pre