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

题目:

面试tips:

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

思路:

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

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

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

代码实现:

1.

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)

2.

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)

3.

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

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)

相关推荐

  1. offer面试13 在O(1)时间删除结点

    2024-01-22 20:00:02       57 阅读
  2. Offer(第2版)面试 24:反转

    2024-01-22 20:00:02       61 阅读
  3. 牛客offer其他算法篇

    2024-01-22 20:00:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 20:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 20:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 20:00:02       82 阅读
  4. Python语言-面向对象

    2024-01-22 20:00:02       91 阅读

热门阅读

  1. Redis相关知识

    2024-01-22 20:00:02       61 阅读
  2. 2024.Python

    2024-01-22 20:00:02       55 阅读
  3. ffmpeg使用手册

    2024-01-22 20:00:02       69 阅读
  4. leetcode 122双周赛 解题思路+代码

    2024-01-22 20:00:02       50 阅读
  5. HJ6 质数因子【C语言】

    2024-01-22 20:00:02       52 阅读
  6. kingbase常用SQL总结之统计大小

    2024-01-22 20:00:02       50 阅读
  7. 链表--简单学习

    2024-01-22 20:00:02       54 阅读
  8. pwn前置基础

    2024-01-22 20:00:02       59 阅读
  9. Nginx动静分离

    2024-01-22 20:00:02       42 阅读
  10. python笔记5

    2024-01-22 20:00:02       51 阅读
  11. Android studio 之 弹窗PopupWindow

    2024-01-22 20:00:02       59 阅读
  12. 670. 最大交换

    2024-01-22 20:00:02       48 阅读