备战蓝桥杯Day18 - 双链表

一、每日一题

蓝桥杯真题之工作时长

这个题写代码做的话很麻烦,而且我也不一定能写出来,所以我直接就是用的excel来计算的时间和。

使用excel的做法

1.先把文件中的时间复制到excel中。

2.把日期和时间分到两列。

分成两列的步骤:

选中要分列的数据(注意!只能选择一列,多列不可操作),在上面找到数据,再找到分列这个操作。

点进去后选择分隔符号,点击下一步。

只选择空格,不选择其他的,之后点击下一步。

格式可以选择常规,也可以选择日期,没太大影响。

最后点击完成即可。

最后得到的结果,不知道为什么后面会有0:00,但是不影响结果计算,主要是把时间单独分出一列来即可。

3.计算一天中上下班的时间差

在新的一列中这样写出计算公式,并得出结果,往下复制,excel会根据对应的单元格得出相应的数据,复制几个后,可以点右下角的加号向下拉,就能得出两个单元格的的差值,就是一天中上班的时间。

4.计算每天上班时间的和

5.换算成秒

计算出时间总和的时间单位为天,一天24*60*60s = 86400s。最后结果为5101913s。

在蓝桥杯官网提交结果后,运行成功通过。

二、双链表

单链表只可以实现数据不断向前寻找,不可以向后寻找,为了提高效率,从而引出双链表。

双链表的每个节点有两个指针,一个指向后一个节点,一个指向前一个节点,这样既可以向前寻找数据,也可以向后寻找。

双链表的初始化及基本操作。

python 复制代码
class Node:  
    def __init__(self, data=None):  
        self.data = data  
        self.next = None  
        self.prev = None  
  
  
class DoublyLinkedList:  
    def __init__(self):  
        self.head = None  
  
    # 在链表末尾添加节点  
    def append(self, data):  
        if not self.head:  
            self.head = Node(data)  
        else:  
            new_node = Node(data)  
            current = self.head  
            while current.next:  
                current = current.next  
            current.next = new_node  
            new_node.prev = current  
  
    # 在链表开头添加节点  
    def prepend(self, data):  
        new_node = Node(data)  
        new_node.next = self.head  
        if self.head:  
            self.head.prev = new_node  
        self.head = new_node  
  
    # 删除指定数据的节点  
    def delete(self, data):  
        current = self.head  
        if current and current.data == data:  
            self.head = current.next  
            if self.head:  
                self.head.prev = None  
            return  
  
        while current and current.data != data:  
            current = current.next  
  
        if current.next:  
            current.next.prev = current.prev  
        if current.prev:  
            current.prev.next = current.next  
  
    # 打印链表  
    def print_list(self):  
        current = self.head  
        while current:  
            print(current.data, end=' ')  
            current = current.next  
        print()  
  
  
# 示例  
dll = DoublyLinkedList()  
dll.append(1)  
dll.append(2)  
dll.prepend(0)  
dll.print_list()  # 输出: 0 1 2  
dll.delete(1)  
dll.print_list()  # 输出: 0 2
相关推荐
戊子仲秋44 分钟前
【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)
算法·leetcode·职场和发展
Milo_K1 小时前
今日leetCode 反转字符串
算法·leetcode
郝同学的测开笔记1 小时前
PyQt6 中的布局管理
后端·python·测试
摆烂小白敲代码1 小时前
【算法】最长公共子序列(C/C++)
c语言·数据结构·c++·算法·最长公共子序列·lcs
指弹代码摄影狗1 小时前
【Fastapi】参数获取,json和query
python·fastapi
西猫雷婶1 小时前
python画图|在3D图上画2D直方图(作图平面移动)
开发语言·python·平面
测试界兮兮1 小时前
Python的调试工具之交互式调试器
开发语言·自动化测试·软件测试·python·功能测试·单元测试·压力测试
钟离紫轩工程师2 小时前
django开发流程
后端·python·django
Daking-2 小时前
「队列」实现优先队列(priority_queue)的功能 / 手撕数据结构(C++)
开发语言·数据结构·c++
余翛然2 小时前
数据结构二
数据结构·算法