从尾到头打印链表
【题目】:
输入一个链表的头节点,从尾到头打印每个节点的值。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
【解题思路】:
- 栈: 每读出一个结点的值,压入栈中,最后出栈得到结果;
- 递归: 每次先答应下一个节点的值再打印自身节点。
# data structure
class LinkNode(object):
def __init__(self, val):
self.val = val
self.next = None
# Create the Linklist
def create_link(link):
if not link:
return
p = head = LinkNode(link[0])
for i in link[1:]:
p.next = LinkNode(i)
p = p.next
return head
# print link
def print_link(head):
while head:
print(head.val, end=" ")
head = head.next
print()
def reverse_print_link_by_stack(head):
if not head:
return
stack = []
while head:
stack.append(head.val)
head = head.next
for i in stack[::-1]:
print(i, end=" ")
print()
def reverse_print_pink_by_recursive(head):
if head:
if head.next:
reverse_print_pink_by_recursive(head.next)
print(head.val, end=" ")
a = [1, 2, 3, 4, 5]
obj = create_link(a)
print_link(obj)
reverse_print_link_by_stack(obj)
reverse_print_pink_by_recursive(obj)
运行结果:
示例代码2:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reversePrint(self, head):
"""
:type head: ListNode
:rtype: List[int]
"""
stock = []
while head:
stock.append(head.val)
head = head.next
return stock[::-1]