python_ACM模式《剑指offer刷题》链表1

题目:

面试tips:

询问面试官是否可以改变链表结构

思路:

  1. 翻转链表,再遍历链表打印。

  2. 想要实现先遍历后输出,即先进后出,因此可借助栈结构。

  3. 可用隐式的栈结构,递归来实现。

代码实现:

python 复制代码
class ListNode:
    def __init__(self, val = 0, next = None):
        self.val = val
        self.next = next

class myClass:
    def printList(self, head):
        # 前后指针翻转链表
        prev, curr = None, head
        while curr:
            tmp = curr.next
            curr.next = prev
            prev, curr = curr, tmp
        # 翻转后prev即指向新链表的头节点
        # 打印链表
        curr = prev
        while curr:
            print(curr.val)
            curr = curr.next

if __name__ == '__main__':
    # 构造测试用例 -- 用数组构造链表
    arr = [5,4,2,3]
    head = ListNode(arr[0]) if arr else None
    curr = head
    for i in range(1, len(arr)):
        curr.next = ListNode(arr[i])
        curr = curr.next
    # 执行函数
    a = myClass()
    a.printList(head)
python 复制代码
class ListNode:
    def __init__(self, val = 0, next = None):
        self.val = val
        self.next = next

class myClass:
    def printList(self, head):
        # 定义一个栈,用来存储遍历过的链表节点
        stack = []
        curr = head
        while curr:
            stack.append(curr)
            curr = curr.next
        # 打印链表值,这里pop出来也可释放内存
        while stack:
            node = stack.pop()
            print(node.val)

if __name__ == '__main__':
    # 构造测试用例 -- 用数组构造链表
    arr = [5,4,2,3]
    head = ListNode(arr[0]) if arr else None
    curr = head
    for i in range(1, len(arr)):
        curr.next = ListNode(arr[i])
        curr = curr.next
    # 执行函数
    a = myClass()
    a.printList(head)

采用递归的思想 注意是递归到最后一个元素才开始打印 即要先写递归 后写打印代码

python 复制代码
class ListNode:
    def __init__(self, val = 0, next = None):
        self.val = val
        self.next = next

class myClass:
    def printList(self, head):
        # 递归打印链表 -- 递归就是栈 也就相当于使用了一个隐式的栈结构
        # 终止条件
        if not head:
            return
        # 单层递归逻辑 -- 先递归后打印
        self.printList(head.next)
        print(head.val)
        
if __name__ == '__main__':
    # 构造测试用例 -- 用数组构造链表
    arr = [5,2,6,3,5,4]
    head = ListNode(arr[0]) if arr else None
    curr = head
    for i in range(1, len(arr)):
        curr.next = ListNode(arr[i])
        curr = curr.next
    # 执行函数
    a = myClass()
    a.printList(head)
相关推荐
qeen878 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码8 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
我星期八休息9 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
漂流瓶jz9 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
你撅嘴真丑10 小时前
map 与 set容器的应用--话题焦点人物
数据结构
生成论实验室10 小时前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
li16709027010 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
风筝在晴天搁浅10 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
WL_Aurora12 小时前
Python 算法基础篇之链表
python·算法·链表
代码中介商12 小时前
数据结构开篇:从问题到解决方案
数据结构