defget(self, index: int) -> int: if index < 0or index >= self.size: return -1 current = self.dummy_node.next for i inrange(index): current = current.next return current.val
defaddAtTail(self, val: int) -> None: new_node = ListNode(val, None) current = self.dummy_node while current.next: current = current.next current.next = new_node self.size += 1
defaddAtIndex(self, index: int, val: int) -> None: if index < 0or index > self.size: return new_node = ListNode(val, None) current = self.dummy_node for i inrange(index): current = current.next new_node.next = current.next current.next = new_node 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
# 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)
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next 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
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None
classSolution: defdetectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]: slow = head fast = head # 为什么不写 while fast.next and fast.next.next # 会出现头结点为[]时, 会报错Nonetype has attribute next, null没有next了 # ps:而且判断条件是按顺序来的, 写在前面的先判断, 如果前面错了就不往后判断了 while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: slow = head while slow != fast: slow = slow.next fast = fast.next return slow returnNone
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next classSolution: defdeleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: dummy_node = pre = ListNode(0, head) cur = head while cur: while cur.nextand cur.next.val == cur.val: cur = cur.next if pre.next == cur: pre = cur else: pre.next = cur.next cur = cur.next return dummy_node.next