首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

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

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

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

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

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

下面是今日的大厂算法题

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

# 算法题目

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

# 算法思路

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

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

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

节点交换:

记录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。

# 总结

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OLuHQuEE8zJClfPvijW1gLDw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券