程序员老鬼

程序员入职5天被开除!因按时下班.....

最近我在网上看到一个网友的发帖,我觉得挺有意思的,就来和大家八卦一下。

有网友爆料,公司有个新来的小伙伴,才刚刚报到上班没几天,结果就因为每天准时打卡下班被开除了。是的,就因为按时下班!

Image

说到加班,我估计很多上班族都有话说。现在很多公司几乎把加班当成了一种“企业文化”,你不加班简直就是异类。这种现象,不是一两个公司的问题,而是一个普遍存在的职场文化问题。

Image

我翻了翻贴子的评论区,网友们也是积极讨论。有人说,这样的公司还能招到人吗?

Image

也有人说,这种环境下,这种公司迟早要完。

Image

更有网友直言,这种现象简直是歪风邪气。

Image

工作和生活应该是一个平衡,我们需要坚持自己的生活节奏,改善这种现象。现在都说零零后整顿职场,我觉得咱们还是可以期待一下的。

下面是今日的大厂算法题

今日算法题,来自LeetCode的第24题:两两交换链表中的节点,下面是我的算法思路及实现,让我们来看看吧。
算法题目

给定一个链表,实现一个算法来交换链表中每两个相邻节点的值,并返回交换后的链表。不能只是单纯地改变节点内部的值,而是需要实际地交换节点。

算法思路
  1. 创建哨兵节点:为了简化边界条件,创建一个哨兵节点,它的next指针指向链表的头节点。

  2. 初始化指针:使用两个指针prev和current。prev初始化为哨兵节点,current初始化为链表的头节点。

  3. 遍历链表:只要current及其下一个节点不为空,执行交换操作。

  4. 节点交换:

  • 记录current的下一个节点为next。

  • 将current的next指针指向next的下一个节点。

  • 将next的next指针指向current,完成一对节点的交换。

  • 更新prev的next指针为next,以链接到已交换的节点对。

  • 移动prev和current指针,为下一对节点的交换做准备。

  • 返回结果:返回哨兵节点的下一个节点,即交换后的链表的头节点。

  • 代码实现
    C语言实现
    //假设链表节点定义如下:struct ListNode {    int val;    struct ListNode *next;};
    //实现函数struct ListNode* swapPairs(struct ListNode* head) { struct ListNode dummy; dummy.next = head; struct ListNode *prev = &dummy, *current = head;
    while (current && current->next) { struct ListNode *next = current->next; current->next = next->next; next->next = current; prev->next = next;
    prev = current; current = current->next; }
    return dummy.next;}

    Java实现

    // 链表节点定义:public class ListNode {    int val;    ListNode next;    ListNode(int x) { val = x; }}
    //实现方法:public ListNode swapPairs(ListNode head) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = dummy, current = head;
    while (current != null && current.next != null) { ListNode next = current.next; current.next = next.next; next.next = current; prev.next = next;
    prev = current; current = current.next; }
    return dummy.next;}

    Python实现

    // 链表节点定义:class ListNode:    def __init__(self, val=0, next=None):        self.val = val        self.next = next
    // 实现方法:def swapPairs(head: ListNode) -> ListNode: dummy = ListNode(0, head) prev, current = dummy, head
    while current and current.next: next = current.next current.next = next.next next.next = current prev.next = next
    prev = current current = current.next
    return dummy.next

    算法解析

    这个算法的核心在于掌握链表节点之间的交换操作,同时保证链表的连续性和完整性不受影响。通过引入哨兵节点,我们避免了对头节点进行特殊处理,简化了代码逻辑。
    示例和测试

    以链表1->2->3->4为例,应用上述算法后,链表变为2->1->4->3。

    总结
    两两交换链表中的节点是一个既简单又实用的算法问题,不仅可以加深对链表操作的理解,还能提高解决问题的灵活性和创造力。
    Image

    扫描下方二维码,购买《ChatGPT实战课程》,送ChatGPT独享账号!

    Image

    课程包含超多ChatGPT前沿玩法,帮助大家熟练掌握ChatGPT!

    推荐阅读:
    Image