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

在单链表中分隔偶数和奇数节点

是指将一个单链表中的节点按照节点值的奇偶性进行分隔,使得所有奇数节点都排在偶数节点之前。

实现这个功能的一种常见方法是创建两个新的链表,一个用于存储奇数节点,另一个用于存储偶数节点。然后遍历原始链表,将奇数节点连接到奇数链表的末尾,将偶数节点连接到偶数链表的末尾。最后,将奇数链表的尾节点指向偶数链表的头节点,即完成了分隔。

以下是一个示例的实现代码:

代码语言:txt
复制
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def separateOddEven(head):
    if not head or not head.next:
        return head
    
    odd_head = odd_tail = ListNode(None)
    even_head = even_tail = ListNode(None)
    
    while head:
        if head.val % 2 == 0:
            even_tail.next = head
            even_tail = even_tail.next
        else:
            odd_tail.next = head
            odd_tail = odd_tail.next
        head = head.next
    
    even_tail.next = None
    odd_tail.next = even_head.next
    
    return odd_head.next

这段代码中,我们使用了四个指针,odd_head、odd_tail、even_head、even_tail,分别表示奇数链表的头节点、奇数链表的尾节点、偶数链表的头节点、偶数链表的尾节点。我们遍历原始链表,根据节点值的奇偶性将节点连接到对应的链表中。最后,将奇数链表的尾节点指向偶数链表的头节点,完成分隔。

这个功能在实际开发中的应用场景比较广泛,例如在对链表进行排序、查找、统计等操作时,可能需要将链表中的节点按照某种规则进行分隔。另外,在一些算法题目中,也会出现类似的需求。

腾讯云提供了丰富的云计算产品,其中与本问题相关的产品是云数据库 TencentDB 和云服务器 CVM。云数据库 TencentDB 提供了高性能、可扩展的数据库服务,可以用于存储链表节点的数据。云服务器 CVM 则提供了强大的计算能力和灵活的网络配置,可以用于部署和运行链表分隔的相关代码。

请注意,以上只是腾讯云的一些产品示例,其他云计算品牌商也提供类似的产品和服务,具体选择应根据实际需求和预算进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 题目:将链表奇数偶数位调换组成新的链表

    题目:将链表奇数偶数位调换组成新的链表 原题链接: http://oj.leetcode.com/problems/swap-nodes-in-pairs/ Given a linked list...必须重新建立一个新的链表 进行返回 采用 带头节点链表 知识补充:带头节点链表不带头节点链表有什么区别 带头结点链表好处解决了 不用判断第一个节点是否为空 不需要特殊处理 用统一方法实现就...Q2: 链表遍历操作 ptr(A)=ptr->next(B) 前提条件节点A节点B 位置关系没有发现变化 链表排序(交换位置是排序一个方法)原来位置发生改变如何处理 ?...需要临时遍历记录 下 B位置 链表交换节点 影响不是2个 而是三个 不要忘记最后 1 -2-3 A=2 B=3 2-1-3 A=2 B=1 >>A=1 B=3 解题思路如下 第一次循环处理结果...可以采用递归方式 参照历史题目: 题目:判断一个链表是否回文链表

    1.7K90

    链表中间节点搜索快慢指针

    复盘 我们先设定单链表的长度大于等于3,这样子比较容易分析算法。先简单假设一个长度为3的链表如下: 如果我们要访问中间节点,最终搜索到的应该是n2节点,内容就是n2。...如果链表的长度为偶数,这里假设为4,那么如下: 如果我们要访问中间节点,最终搜索到的应该是n2n3节点,内容就是n2n3。...快慢指针的应用场景 快慢指针主要有如下的应用场景: 找到链表的中点。 判断链表是否存在环。 删除链表倒数第x个节点。 第一种情况已经作为复盘案例分析过,下面分析一下第二第三种场景。...判断链表是否存在环 假设链表有6个节点(head节点为n1,tail节点为n6),已经形成环(n6的下一个节点为n1): 使用快慢指针,快指针每次遍历会比慢指针多一个元素,这样子的话,如果链表已经成环...,无论快指针慢指针之间相隔多少个节点,快指针总是能够追上慢指针(快指针慢指针指向同一个节点),这个时候就可以判断链表已经成环;否则快指针进行一轮遍历之后就会跳出循环,永远不可能慢指针“重合”。

    41720

    链表问题】删除链表的第K个节点

    【题目描述】 链表删除倒数第 K 个节点。...【要求】 如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1) 【难度】 士 【解答】 删除的时候会出现三种情况: 1、不存在倒数第 K 个节点,此时不用删除。...2、倒数第 K 个节点就是第一个节点。 3、倒数第 K 个节点在第一个节点之后。 所以我们可以用一个变量 num 记录链表一共有多少个节点。 如果 num < K,则属于第一种情况。...如果 num == K,则属于第二情况。 如果 num > K, 则属于第三种情况,此时删除倒数第 K 个节点等价于删除第 (num - k + 1) 个节点。...代码如下: //节点 class Node{ public int value; public Node next; public Node(int data) {

    1.7K10

    【Leetcode -328.奇偶链表 - 725.分隔链表

    Leetcode -328.奇偶链表 题目:给定单链表的头节点 head ,将所有索引为奇数节点索引为偶数节点分别组合在一起,然后返回重新排序的列表。...第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数奇数组内部的相对顺序应该与输入时保持一致。...,最后将奇数链表的尾节点连上偶数链表的头节点;开始头节点奇数链表的头节点节点,头节点的next为偶数链表的头节点节点;然后依次将奇数链表的尾节点连上偶数链表节点的next,因为偶数节点的next...就是奇数节点;而偶数链表的尾节点连上奇数链表节点的next; 先将奇数链表偶数链表划分好,奇数链表的尾节点oddtail暂时不处理,奇数链表的头节点为head: 将奇数链表的尾节点连到偶数链表的头节点...的链表一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。

    9610

    LeetCode 328:奇偶链表 Odd Even Linked List

    给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里的奇数节点偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。...输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明: 应当保持奇数节点偶数节点的相对顺序...链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...解题思路: 这道题很简单,迭代链表,将该链表奇数节点偶数节点分别取出分隔成两个链表,然后将奇偶两个链表连接起来组成新链表,返回头节点即可。...需要记录偶数节点的第一个节点,因为这是偶数链表的头节点,最后拼接链表时要用奇数链表的尾节点连接该节点

    71910

    LeetCode 328:奇偶链表 Odd Even Linked List

    给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里的奇数节点偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。...输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明: 应当保持奇数节点偶数节点的相对顺序...链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...The first node is considered odd, the second node even and so on … 解题思路: 这道题很简单,迭代链表,将该链表奇数节点偶数节点分别取出分隔成两个链表...需要记录偶数节点的第一个节点,因为这是偶数链表的头节点,最后拼接链表时要用奇数链表的尾节点连接该节点

    62140

    LeetCode-328-奇偶链表

    # LeetCode-328-奇偶链表 给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里的奇数节点偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。...: 1->3->5->2->4->NULL 示例2: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明: 应当保持奇数节点偶数节点的相对顺序...链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...# 解题思路 双指针: 一个指针指向奇数节点,一个指针指向偶数节点 间隔遍历,奇数指针只能指向奇数节点偶数指针只能指向偶数节点 对于链表长度为奇数时,奇数指针one能够指向之后一个数字,此时偶数指针two...注意:间隔遍历很重要,如果按照顺序遍历,会出现onetwo指针奇偶长度的指向不一样,即onetwo快到链表末尾时候,可能指向的奇数链表也可能指向的偶数链表,这样就无法进行最后指针拼接的判断了,

    28010

    【一天一大 lee】奇偶链表 (难度:中等) - Day20201113

    题目: 给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里的奇数节点偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。...示例2: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明: 应当保持奇数节点偶数节点的相对顺序。...链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...抛砖引玉 题目限制了空间复杂度 O(1),则不能使用遍历链表取出节点然后重组的逻辑,只能借助使用双指针+更新next指向来修改原链表: odd、even奇偶指针遍历链表:odd只遍历链表奇数节点、even...只遍历链表偶数节点 奇数节点指针指向后一个偶数位指针的下一个位(next) 偶数指针指向后一个奇数位的下一个位(next) ?

    36430

    链表的实现,判断是否有环环的入口,找到链表的中间节点倒数第k个节点

    链表的核心是头节点,定义一个next指针指向下一个节点的位置 package cn.chinotan.linkedList; public class LinkList { private Node...= null) { cNode = cNode.next; } cNode.next = node; } } // 遍历当前链表 public void printLink...); } // 查找倒数第k节点(采用快慢指针,快指针一下走一步,慢指针一下走一步,快指针先走k步,之后慢指针快指针一起走,当快指针到终点时,满指针的位置即所求点) public void findElem...); } // 判断链表是否有环(采用快慢指针,快指针一下走两步,慢指针一下走一步,当没有遍历完时,快指针慢指针遇到后就说明链表有环) public Boolean isLoop() {...(采用快慢指针,记住头节点到环的入口所走过的路快慢指针相遇点到环的入口所走过的路是一样的) public void findLoopPort() { Node slow = head; Node

    47430

    【Day28】力扣算法(超详细思路+注释)

    奇偶链表 原题链接:328. 奇偶链表 题目描述: 给定单链表的头节点 head ,将所有索引为奇数节点索引为偶数节点分别组合在一起,然后返回重新排序的列表。...第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数奇数组内部的相对顺序应该与输入时保持一致。...题目要求我们将所有奇数节点连在一块,所有偶数节点连在一块,且奇数链表偶数链表拼接。 必须在 O(1) 的额外空间复杂度 O(n) 的时间复杂度下解决这个问题。...我们可以创建两个新的链表,分别代表奇数链表偶数链表,第一个节点奇数,作为奇数链表的头节点;第二个节点偶数,作为偶数链表的头节点。...当我们遍历完原始链表,也就完成了奇数链表偶数链表节点连接,这时候将奇数链表末尾节点指向偶数链表节点即可。

    43130

    【初阶数据结构篇】链表算法的进阶修炼:破解复杂链表问题的奥秘

    链表算法题进阶篇 相交链表 给你两个链表的头节点 headA headB ,请你找出并返回两个链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。...奇数-奇数 由step1(1)得出的结论,如果N是偶数,则第⼀圈快慢指针就相遇了。...由step1(2)得出的结论,如果N是奇数,则fast指针slow指针第⼀轮的时候套圈了,开始进⾏下⼀轮的追逐;当N是奇数,要满⾜以上的公式,则 (x+1)C 必须也要为奇数,即C为奇数,满⾜ (...新节点的 next 指针 random 指针也都应指向复制链表的新节点,并使原链表复制链表的这些指针能够表示相同的链表状态。复制链表的指针都不应指向原链表节点 。...例如,如果原链表中有 X Y 两个节点,其中 X.random --> Y 。那么复制链表对应的两个节点 x y ,同样有 x.random --> y 。 返回复制链表的头节点

    15010

    每天一算:Odd Even Linked List

    LeetCode上第328号问题:Odd Even Linked List 题目 给定一个链表,把所有的奇数节点偶数节点分别排在一起。...请注意,这里的奇数节点偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。...->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明: 应当保持奇数节点偶数节点的相对顺序...链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。 解题思路 这道题给了我们一个链表,让我们分开奇偶节点,所有奇节点在前,偶节点在后。...设定两个虚拟节点,dummyHead1用来保存奇节点,dummyHead2来保存偶节点; 遍历整个原始链表,将奇节点放于dummyHead1,其余的放置dummyHead2 遍历结束后,将dummyHead2

    60330
    领券