最近我在网上看到一个网友的发帖,我觉得挺有意思的,就来和大家八卦一下。
有网友爆料,公司有个新来的小伙伴,才刚刚报到上班没几天,结果就因为每天准时打卡下班被开除了。是的,就因为按时下班!
说到加班,我估计很多上班族都有话说。现在很多公司几乎把加班当成了一种“企业文化”,你不加班简直就是异类。这种现象,不是一两个公司的问题,而是一个普遍存在的职场文化问题。
我翻了翻贴子的评论区,网友们也是积极讨论。有人说,这样的公司还能招到人吗?
也有人说,这种环境下,这种公司迟早要完。
更有网友直言,这种现象简直是歪风邪气。
工作和生活应该是一个平衡,我们需要坚持自己的生活节奏,改善这种现象。现在都说零零后整顿职场,我觉得咱们还是可以期待一下的。
下面是今日的大厂算法题
今日算法题,来自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。
# 总结
两两交换链表中的节点是一个既简单又实用的算法问题,不仅可以加深对链表操作的理解,还能提高解决问题的灵活性和创造力。
领取专属 10元无门槛券
私享最新 技术干货