思路1
构建一个列表,每次在头插入
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
result = []
p = listNode
while p :
result.insert(0,p.val)
p = p.next
return result
思路2
头插法
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
# 若链表为空,则返回空列表
if not listNode:
return []
# 采用头插法
# 初始化新链表的表头
new_head = listNode
# q为操作指针,即从原始链表的第二个元素开始操作
q = listNode.next
# 若链表只有一个元素,则直接返回
if not q:return [listNode.val]
# 初始化时,new_head为新链表的尾元素,要置为None
new_head.next = None
while q:
tmp = q.next # 保存后继
q.next = new_head # 头插
new_head = q # 更新new_head
q = tmp # 更新q
res = []
while new_head:
res.append(new_head.val)
new_head = new_head.next
return res