题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
首先看到题目之后想到两种方法:
一种是将元素全部加入数组中,在数组中头尾对调,不会改变原链表的结构;
另一种是直接在链表中反转,然后遍历加入数组中。
分别用两种方法都做了一下。
#一种方法:直接遍历链表到数组里,将数组前后元素对调
def reversePrint2(head: ListNode):
if head == None : #链表为空
return []
if head.next == None: # 链表只有一个元素
return [head.val]
result = []
while head != None: #1.将链表元素全部复制到数组
result.append(head.val)
head = head.next
for i in range(0,len(result)//2): #2.数组元素对调
result[i],result[len(result)-i-1] = result[len(result)-i-1],result[i]
return result
#反转链表
def reversePrint(head: ListNode):
if head == None : #链表为空
return []
if head.next == None: # 链表只有一个元素
return [head.val]
#1.将链表反转
reveHead = head #反转链表的头结点
temp = head.next
while temp != None:
#该表指向
head.next = temp.next
temp.next = reveHead
reveHead = temp
#向后推移
temp = head.next
#2.遍历链表,放进数组
relt = []
while reveHead != None:
relt.append(reveHead.val)
reveHead = reveHead.next
return relt
发现链表的指针操作虽然复杂,但是效率比数组高。