leetcode-328 奇偶链表

这篇具有很好参考价值的文章主要介绍了leetcode-328 奇偶链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目如下:
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

示例如下:

leetcode-328 奇偶链表

输入: head = [1,2,3,4,5]
输出: [1,3,5,2,4]

提示:

  • n == 链表中的节点数
  • 0 <= n <= 104
  • -106 <= Node.val <= 106
算法思路

官方题解我不知道它是怎么做的,反正我是这样做的。直接在在原链表head进行修改即可。
如果链表的节点的超过2个,那么把之后索引下标为奇数的节点连接在head的第一个节点后面(做完之后把对应的指针后移),把索引下标为偶数的节点连接在head的第二个节点后面(做完之后把对应的指针后移),直到到达最后一个节点即可。

图解如下(第5个元素没有画):

leetcode-328 奇偶链表

实现代码如下(Python):

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        
class Solution(object):
    def oddEvenList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        p = head
        count = 1
        p1 = None
        last = None
        while p:
            next = p.next
            p.next = None
            if count == 1:
                p1 = p
            elif count == 2:
                p1.next = p
                last = p1.next
            else:
                if count % 2 != 0:
                    p2 = p1.next
                    p1.next = p
                    p1 = p1.next
                    p1.next = p2
                else:
                    last.next = p
                    last = last.next

            p = next
            count += 1

        return head

if __name__ == '__main__':
    a = Solution()
    head = ListNode(1, ListNode(2,ListNode(3, ListNode(4,ListNode(5,None)))))
    a.oddEvenList(head)

运行结果:
leetcode-328 奇偶链表文章来源地址https://www.toymoban.com/news/detail-427337.html

到了这里,关于leetcode-328 奇偶链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode题目详解】 203. 移除链表元素707. 设计链表206. 反转链表 day3(补)

    题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1 输出:[] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[] 看到这道题就想到了链表 这道题有两种写法,涉及如下链表操作的两种方式: 直接使用

    2024年02月16日
    浏览(42)
  • 【leetcode合集】如何知道自己是否掌握了数组与链表?试试这几道题目吧!

      目录 1.数组题目合集 1.1 leetcode.27 移除元素 1.2 leetcode.26 删除有序数组中的重复项 1.3 leetcode.88 合并两个有数数组 2.链表题目合集 2.1 leetcode.203 移除链表元素 2.2 leetcode.206 反转链表 2.3 leetcode.876 链表的中间结点 2.4 牛客 链表中倒数第k个结点 2.5 leetcode.21 合并两个有序链表 2.

    2024年01月25日
    浏览(43)
  • 【LeetCode题目详解】24.两两交换链表中的节点19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II day4(补)

      给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 这道题建议使用 虚拟头结点 ,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。 接下来就是

    2024年02月15日
    浏览(43)
  • 【数据结构和算法】奇偶链表

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:分离节点后合并 三、代码 3.1 方法一:分离节点后合并 四、复杂度分析 4.1 方法一:分离节点后合并 这是力扣的 328 题,难

    2024年01月20日
    浏览(50)
  • LeetCode //C - 328. Odd Even Linked List

    Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list. The first node is considered odd, and the second node is even, and so on. Note that the relative order inside both the even and odd groups should remain as it was in the input. You must solve the proble

    2024年01月25日
    浏览(45)
  • 多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug

    这段代码实际上是一个常见的算法题目的解法,目标是将一个二叉搜索树转换为一个排序的双向链表。整个过程是通过中序遍历来实现的,遍历过程中修改节点的左右指针来构建双向链表。代码中使用了一个额外的节点 dummy 来帮助构建双向链表,并使用 pre 节点来保存前一个

    2024年02月06日
    浏览(46)
  • 华为OD机试(B、C卷)、机考,200分的题目整理如下,冲满分必备

    2023 年参加华为 OD 机试,你收到的短信邀请链接中提及的应该是 2022Q4 或者 2023Q1 都是 A 卷。 5月1日之后,有部分朋友收到的是 B 卷,那么恭喜你看到本文了,快抓紧刷吧。 B 卷新题库正在更新中…… O(∩_∩)O 只要是这样的试卷标题,那表示你使用的就是华为 OD 的新题库了。

    2024年02月03日
    浏览(84)
  • 【面试必刷TOP101】判断一个链表是否为回文结构 & 链表的奇偶重排

    目录 题目:判断一个链表是否为回文结构_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 题目:链表的奇偶重排_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 这道题我的思路还是比较清晰的,主要是三步走

    2024年02月07日
    浏览(71)
  • 代码随想录额外题目| 数组03 ●34排序数组查首尾位置 ●922按奇偶排序数组II●35搜索插入位置

    #34排序数组查首尾位置 medium,我写的:1 暴力 我写的,做了个类似二分搜索的方法: 随想录:从两头都做类似二分搜索 #922 按奇偶排序数组II 我的解法,有点蠢: inplace解法: 把odd idx放的偶数,给换到even idx放的奇数 注意j是从1开始,而且每轮i,j都是继续增加不回去 空间表

    2024年02月15日
    浏览(42)
  • leetcode 922. 按奇偶排序数组 II

    题目描述 解题思路 执行结果 leetcode 922. 按奇偶排序数组 II. 题目描述 按奇偶排序数组 II 给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。 你可以返回 任何

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包