Python技术迷

裸睡,一觉醒来发现隔壁躺着hr~

给大家分享一一位同学来自秋招的“精彩事故”。不仅仅是尴尬,还有点带笑点的。
某位同学在上海参加秋招,入住酒店时本以为自己是一个人住,没想到第二天醒来才发现,自己竟然“共享”了双人床——对面躺着的,居然是公司HR!😱
Image
那位同学刚到酒店时,想必是准备好好休息,毕竟忙了一天的面试,身心疲惫。谁知道,觉得自己一个人住就放松了些,直接就裸睡了,内裤袜子都随便扔到床上。结果半夜,电话响了,没接,再接着就继续睡。
当第二天睁开眼,发现床上竟然有一位陌生人时,尴尬的程度直接爆棚。
更尴尬的是,还把所有的衣物丢到了桌上。想要起床穿衣,却又不敢动,生怕自己那个“HR大人”已经看到了什么。尴尬指数直接飙升!而且,最让人抓狂的还不是这一切,而是……那位陌生人竟然是HR!那可是“面试官”
哈哈,所以大家要记得,平时睡觉的时候,还是得保持基本的生活习惯。毕竟,HR是很可能出现在你身边的~

算法题:奇偶链表

今天来聊一个算法题:奇偶链表。
题目大概是这样的:给定一个链表,要求我们把链表中的节点按照奇偶顺序重新排列。简单来说,就是把所有位置是奇数的节点放前面,偶数位置的节点放后面,而且保留原有的相对顺序。
直觉上,很多人可能会想,既然是“奇偶”,那直接做两次遍历,把奇数和偶数节点分别拿出来,拼接起来不就行了?嗯,确实可以这么做,但我们要考虑算法的效率,怎么让它在一个 pass 内搞定。这时,我们就得考虑如何通过链表的操作来做到这一点。

思路

  1. 两个链表:我们可以创建两个新的链表,一个链表专门用来存放奇数位置的节点,另一个用来存放偶数位置的节点。
  2. 遍历原链表:遍历链表的过程中,每遇到一个奇数位置的节点就把它加到奇链表里,偶数位置的节点就加到偶链表里。
  3. 连接奇偶链表:当遍历完所有节点后,我们将奇链表和偶链表连接起来。这样,奇链表的头节点会指向偶链表的头节点,最终返回新的链表头。

代码实现

好了,话不多说,直接看代码。这个题目最简单的思路就是像我说的,分两条链表处理,然后连接它们。
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def oddEvenList(head):
    if not head or not head.next:
        return head

        odd = head  # 奇数链表的头节点
    even = head.next  # 偶数链表的头节点
    even_head = even  # 记录偶数链表的头节点,最后需要将奇数链表接上

        while even and even.next:
        odd.next = odd.next.next  # 跳过偶数节点,指向下一个奇数节点
        even.next = even.next.next  # 跳过奇数节点,指向下一个偶数节点
        odd = odd.next  # 移动到下一个奇数节点
        even = even.next  # 移动到下一个偶数节点

        odd.next = even_head  # 将奇数链表连接到偶数链表的头节点
    return head  # 返回新的链表头节点

解释一下代码

  1. 初始化奇偶链表:我们首先通过 odd = head 和 even = head.next 初始化两个链表。odd 指向链表中的第一个节点,even 指向第二个节点。这个步骤确保了奇偶链表从头开始分别构建。
  2. 遍历链表:然后,利用 while even and even.next 来遍历原链表。even 和 odd 一步一步向后跳,确保每次 odd 指向一个奇数位置的节点,even 指向一个偶数位置的节点。
  3. 链表连接:最后,odd.next = even_head 这一步是关键。它把奇链表和偶链表连接起来,完成整个奇偶链表的重排。

性能分析

  • 时间复杂度:O(n),我们只遍历了一遍链表,因此时间复杂度是线性的。
  • 空间复杂度:O(1),我们只使用了常数空间来存储指针,并没有额外使用任何数据结构,所以空间复杂度是常数级别。

奇偶链表这个题目,不算特别复杂,但却非常典型,能锻炼我们对链表的理解和操作。通过这个题目,你可以更好地掌握链表的操作技巧,比如如何通过指针的操作调整节点顺序等。

只要我们掌握了这些操作,以后在面对复杂的链表题时就会更加得心应手。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取。