|
一、背景许多小伙伴在刷题时会涉及到链表排序,但对于只学习Python的小伙伴,对于链表的数据结构不太熟悉,无法有效理解ListNode的定义及使用。读者在进行LeetCode刷题时也懵懵懂懂,今天就在这里彻底搞清楚。二、目标理解python版的链表LisNpde定义掌握ListNode的使用方法三、链表ListNode1.ListNode类定义classListNode:def__init__(self,x):self.val=xself.next=None'运行运行说明:上述代码定义了一个名为 ListNode 的类,它是链表中的一个节点的表示。在链表数据结构中,每个节点通常包含两部分:一个存储数据的值(通常是一个整数、字符或其他数据类型),以及一个指向下一个节点的指针。classListNode:这行定义了一个名为 ListNode 的新类。def__init__(self,x):这是 ListNode 类的初始化方法(也称为构造函数)。当你创建一个新的 ListNode 对象时,这个方法会被自动调用。它接受两个参数:self 和 x。self 是一个对实例本身的引用,而 x 是我们要存储在节点中的值。self.val=x :这行将传入的参数 x 的值赋给 self.val。这意味着每个 ListNode 对象都有一个 val 属性,用于存储节点的值。self.next=None:这行初始化 self.next 属性为 None。self.next 是一个指向下一个 ListNode 对象的指针。在创建新的节点时,我们不知道它的下一个节点是什么,所以我们将它初始化为 None。当我们构建链表时,我们会根据需要更新这个指针。2.ListNode使用例:构建一个链表:3->5->6->1#创建各个节点node3=ListNode(3)node5=ListNode(5)node6=ListNode(6)node1=ListNode(1)#构建链表node3.next=node5node5.next=node6node6.next=node1#链表构建完成,现在node3是链表的头节点head=node3#打印链表以验证current_node=headwhilecurrent_node:print(current_node.val,end='->')current_node=current_node.nextprint('None')#打印链表的结尾3.小试牛刀题1:使用链表ListNode,将给定的链表排序definsertion_sort_list(head):#如果链表为空或只有一个节点,则无需排序ifnotheadornothead.next:returnhead#创建一个哑节点(dummynode)作为新链表的头部dummy=ListNode(0)dummy.next=headcurrent=headwhilecurrentandcurrent.next:#如果当前节点的值小于下一个节点的值,则无需交换ifcurrent.val
|
|