#定义一个单向链表
class ListNode:
#使用__init__方法绑定属性,__init__方法第一参数永远是self,表示创建的类实例本身,
#若有__init__方法,创建实例时,需要传入相应的参数,但是self不需要传,python解释器会自己把实例变量传进去。self指的是类本身
def __init__(self, val=0,next=None):
self.val = val
self.next = next
def createLinkList(arr): # 把list转换为Linklist
head = ListNode(arr[0]) #链表是不连续的内存地址
cur = head #cur和head 指向同一地址
for i in range(1, len(arr)):
cur.next = ListNode(arr[i]) #将arr[i]的值存入self.val中,self.next=None赋值给cur.next.next为None,此时val的地址赋值给cur.next,
cur = cur.next #cur的地址为赋值之前cur.next子节点的地址,赋值之后cur.next为空
return head
def print_linked_list(head): #把linklist打印为list
cur = head
res = []
while cur:
res.append(cur.val)
cur = cur.next
return res
class Solution(object):
def middleNode(self, head): # 快慢指针(一个指针快,一个指针慢)
p, q = head, head
while q and q.next: # 注意 循环条件,q and q.next
p = p.next
q = q.next.next
return p
head = createLinkList([1,3,2,0,-4])
# print(head.val)
# lst = print_linked_list(head)
# print(lst)
s = Solution() #创建实例
a = s.middleNode(head) #方法调用
res = print_linked_list(a) #把linkList 转化为list
print(res)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)