zoukankan      html  css  js  c++  java
  • [剑指offer]6.从尾到头打印链表+18.删除链表节点

    链表

    6.从尾到头打印链表

    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

    方法一 迭代

    创建空列表res,将链表值head.val依次存进res,返回翻转后的res

    代码

    class Solution:
        def reversePrint(self, head: ListNode) -> List[int]:
            res = []
            while head:
                res.append(head.val)
                head = head.next
            return res[::-1]
    

    结果

    执行用时 :44 ms, 在所有 Python3 提交中击败了81.86%的用户

    内存消耗 :15.1 MB, 在所有 Python3 提交中击败了100.00%的用户

    方法二 递归

    递归调用函数,将元素从最后开始输出

    代码

    class Solution:
        def reversePrint(self, head: ListNode) -> List[int]:
            while not head:
                return []
            return self.reversePrint(head.next) + [head.val]
    

    结果

    执行用时 :124 ms, 在所有 Python3 提交中击败了18.23%的用户

    内存消耗 :22.7 MB, 在所有 Python3 提交中击败了100.00%的用户

    18.删除链表的节点

    题目

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。

    返回删除后的链表的头节点。

    head是一个单向链表的头指针,val是给定要删除的值。修改指针位置实现删除链表。

    代码

    class Solution:
        def deleteNode(self, head: ListNode, val: int) -> ListNode:
            if head.val == val:    
                return head.next
            dummy = ListNode(0)   # dummy为一个节点
            dummy.next = head
            pre, cur = dummy, dummy.next  # 当前节点与指针
            while cur:    # 当指针不为None
                if cur.val == val:  # 当节点的指针指向val
                    pre.next = cur.next # 将指针修改
                    return dummy.next   # 返回head
                else:
                    pre = pre.next
                    cur = cur.next
    
  • 相关阅读:
    [HNOI2010]CITY 城市建设

    [HNOI2011]数学作业
    [NOI2012]美食节
    [HEOI2014]大工程
    [HEOI2013]ALO(待更)
    [HEOI2016/TJOI2016]序列
    贪食蛇(未完待续)
    [HEOI2016/TJOI2016]字符串
    bzoj 2437[Noi2011]兔兔与蛋蛋 黑白染色二分图+博弈+匈牙利新姿势
  • 原文地址:https://www.cnblogs.com/wyz-2020/p/12514707.html
Copyright © 2011-2022 走看看