#(1)创建节点classListNode:def__init__(self,x):
self.val = x
self.next=None#(2)初始化单链表classLinkList:def__init__(self):
self.head=NonedefinitList(self, data):#初始化单链表#创建头结点
self.head = ListNode(data[0])
r = self.head
p = self.head
# 逐个为data内的数据创建节点,建立链表for i in data[1:]:
node = ListNode(i)
p.next= node
p = p.nextreturn r
defprintlist(self,head):#遍历单链表if head ==None:return
node = head
while node !=None:print(node.val, end=' ')
node = node.next
反转单链表
方法一 生成新链表
(1)将链表里的值保存到列表,
(2)遍历列表,生成节点加入到新链表中,时间空间复杂度都为O(n)
defreverseLinkedList1(head):# arrayList = []# while head:# arrayList.append(head.val)# head = head.next# # ArrayList.reverse() # 列表的反转功能# newHead = head(0)# tmp = newHead# for i in arrayList[::-1]: # 反向遍历列表# tmp.next = head(i)# tmp = tmp.next# return newHead.next
arrayList =[]
head = head
while head:
arrayList.insert(0, head.val)#插入
head = head.next
newHead = ListNode(0)#生成第一个新节点
tmp = newHead
for i in arrayList:
tmp.next= ListNode(i)
tmp = tmp.nextreturn newHead.next
https://zhuanlan.zhihu.com/p/66449047
https://www.cnblogs.com/petrolero/p/9822008.html
defreverseLinkedList4(self, head):if head ==Noneor head.next==None:# 边界条件return head
else:
newHead = reverseLinkedList4(head.next)
head.next.next= head
head.next=Nonereturn newHead