剑指Offer(三):从尾到头打印链表

                       剑指Offer(三):从尾到头打印链表

PS:个人笔记。根据Jack-Cui的博客学习,C++学会了再补。

题目描述:

输入一个链表,返回一个反序的链表

思路:

通常,这种情况下,我们不希望修改原链表的结构。返回一个反序的链表,这就是经典的“后进先出”,我们可以使用实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中(先把节点放在栈底)。当遍历完整个链表后,再从栈顶开始逐个输出结点的值(栈顶拿的值是最后放的,这样就达到了后进先出的效果),给一个新的链表结构,这样链表就实现了反转。

链表是数据结构中最基本常用的,C++语言中单链表是利用指针操作实现的,python作为面向对象编程的,可以使用创建一个Node类来实现链表,利用类的属性引用来代替指针操作。

代码:

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
 
class Solution:                                           #⭐这个代码尝试后报错
    def printListFromTailToHead(self, listNode):
        # write code here
        result = []
        while listNode:
            result.insert(0, listNode.val)
            listNode = listNode.next
        return result

另一个博主的代码:

class ListNode():                     #链表的构造,初始化
    def __init__(self, x):  
        self.val = x  
        self.next = None  
  
def CreateList(n):                    #链表的创建 
    if n <= 0:                        #没有节点报错
        return False  
    if n == 1:                        #只有一个节点
        return ListNode(1)  
    else:  
        listNode = ListNode(1)  
        tmp = listNode  
        for i in range(2,n+1):        #一个一个增加节点
            tmp.next = ListNode(i)  
            tmp  = tmp.next  
    return listNode                   #返回根节点
  
def PrintList(listNode):              #用以打印链表结点  
    tmp = listNode                    #不要改变原来的链表  
    while tmp:  
        print(tmp.val)  
        tmp = tmp.next  
          
def function1(listNode):  
    lists = []  
    while listNode:  
        lists.append(listNode.val)  
        listNode = listNode.next  
    return lists[::-1]                #这里步长设置-1,就反过来了
  
def function2(listNode):  
    lists = []  
    while listNode:  
        lists.append(listNode.val)  
        listNode = listNode.next  
    lists.reverse()                  #直接用一个表格的方法
    return lists   

def main():  
    listNode = CreateList(11)          #打印链表进行测试  
    PrintList(listNode)  
    print(function1(listNode))
      
  
if __name__ == "__main__":  
    main()  


猜你喜欢

转载自blog.csdn.net/qq_41010142/article/details/80030226