# Definition for singly-linked list. classListNode(): def__init__(self, value): self.value = value self.next = None
def__str__(self): returnstr(self.value)
defcreateList(value_list: list) -> ListNode: """ Create Linked List based on list :param value_list: list :return: NodeList """ _len = len(value_list) if _len == 0: returnFalse if _len == 1: return ListNode(value_list) else: root = ListNode(value_list[0]) tmp = root for i inrange(1, _len): tmp.next = ListNode(value_list[i]) # 声明当前节点,再把当前节点与前面节点联系在一起。 tmp = tmp.next# 更新tmp return root # 返回根节点
defconvert2list(head: ListNode) -> list: """ Convert linked list to normal list :param head: ListNonde :return: list """ res = [] p = head while p != None: # print() res.append(p.value) # 由于有ListNode实现了__str__函数 就不用调用p.value来获取节点值了 p = p.next return res
classSolution: defremoveNthFromEnd(self, head: ListNode, n: int) -> ListNode: dummy = ListNode(0) dummy.next = head first = dummy second = dummy for i inrange(1, n+1): first = first.next while first.next != None: first = first.next second = second.next second.next = second.next.next return dummy.next
if __name__ == "__main__": solution = Solution() for i inrange(len(Input)): print("-"*50) head = createList(Input[i]) result = solution.removeNthFromEnd(head, Input1[i]) result = convert2list(result) print(result) print(Answer[i])
有效法糖
1、单向链表的声明、初始化、插入、删除,详情见“DS_链表.md”。
1 2 3 4 5
# Definition for singly-linked list. classListNode: def__init__(self, x): self.val = x self.next = None