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

将一个链表拆分为2个SIngly链表-one包含偶数数据的节点,其他包含奇数数据的节点

将一个链表拆分为两个Singly链表,一个包含偶数数据的节点,另一个包含奇数数据的节点。

答案:

链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。拆分链表可以根据节点的数据属性进行分类,将奇数数据的节点放入一个链表,将偶数数据的节点放入另一个链表。

以下是拆分链表的步骤:

  1. 创建两个新的空链表,一个用于存储奇数数据的节点,另一个用于存储偶数数据的节点。
  2. 遍历原始链表的每个节点,判断节点的数据是奇数还是偶数。
  3. 如果节点的数据是奇数,将该节点从原始链表中移除,并将其插入到存储奇数数据的链表的末尾。
  4. 如果节点的数据是偶数,将该节点从原始链表中移除,并将其插入到存储偶数数据的链表的末尾。
  5. 继续遍历原始链表的下一个节点,重复步骤3和步骤4,直到遍历完整个链表。
  6. 最终,原始链表将被拆分为两个新的链表,一个包含奇数数据的节点,另一个包含偶数数据的节点。

以下是拆分链表的示例代码(使用Python语言):

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

def splitLinkedList(head):
    oddHead = oddTail = ListNode(None)
    evenHead = evenTail = ListNode(None)

    while head:
        if head.val % 2 == 0:
            evenTail.next = head
            evenTail = evenTail.next
        else:
            oddTail.next = head
            oddTail = oddTail.next
        head = head.next

    evenTail.next = None
    oddTail.next = None

    return oddHead.next, evenHead.next

# 示例用法
# 创建一个链表: 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)

# 拆分链表
oddHead, evenHead = splitLinkedList(head)

# 打印奇数链表
print("奇数链表:")
while oddHead:
    print(oddHead.val)
    oddHead = oddHead.next

# 打印偶数链表
print("偶数链表:")
while evenHead:
    print(evenHead.val)
    evenHead = evenHead.next

在云计算领域中,链表的拆分可以应用于数据处理、数据分析、图像处理等场景。腾讯云提供了多种云服务和产品,以下是一些与链表拆分相关的腾讯云产品:

  1. 云数据库 TencentDB:腾讯云的云数据库服务,可用于存储和处理链表数据。
  2. 云函数 SCF(Serverless Cloud Function):腾讯云的无服务器计算服务,可用于处理链表拆分的逻辑。
  3. 人工智能 AI:腾讯云的人工智能服务,可用于链表数据的智能分析和处理。

请注意,以上仅为示例,实际使用时应根据具体需求选择适合的腾讯云产品。

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

相关·内容

LeetCode-328-奇偶链表

# LeetCode-328-奇偶链表 给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。...链表一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...# 解题思路 双指针: 一个指针指向奇数节点一个指针指向偶数节点 间隔遍历,奇数指针只能指向奇数节点偶数指针只能指向偶数节点 对于链表长度为奇数时,奇数指针one能够指向之后一个数字,此时偶数指针two...==null,作为循环结束条件 对于链表长度为偶数时,奇数指针one会在之前遍历完毕奇数位置,此时偶数指针two.next==null,作为循环结束条件 最后进行奇偶链表拼接,one.next=tempTwo...注意:间隔遍历很重要,如果按照顺序遍历,会出现one和two指针在奇偶长度指向不一样,即one和two在快到链表末尾时候,可能指向奇数链表也可能指向偶数链表,这样就无法进行最后指针拼接判断了,

28010

​LeetCode刷题实战328:奇偶链表

给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。 请尝试使用原地算法完成。...链表一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...2、接下来,分别以odd开头“删除”偶数链表,以even 开头删除奇数链表。这样一来整个链表分为两个链表。...同时保留了三个节点,分别是odd(奇数链表最后一个节点),even(偶数链表最后一个节点),evenhead(偶数链表一个节点)。 3、最后只需将奇偶链表连接起来即可。...,一般是奇链表,一半是偶链表,其中保留了两个指针,一个是odd奇链表最后一个元素,evenhead是偶链表一个节点

27530
  • LeetCode笔记:328. Odd Even Linked List

    大意: 给出一个简单链表,集合所有奇数位置节点,后面跟着所有偶数位置节点。请注意这里我们说节点位置而不是节点值。 你应该尝试在固定空间做。...注意: 偶数奇数组中节点相对位置要保持不变。 第一个节点被认为是奇数,第二个是偶数,如此往复。...思路: 题目的要求根据例子就可以明白,奇数偶数位置节点分成两段来排列,关键是要在O(1)空间复杂度下做,否则直接用一个链表就可以简单完成。...O(1)空间下也好做,我们用两个头结点,一个奇数头结点,一个偶数头结点,然后遍历链表奇数位置节点就记录在奇数头结点后面,偶数位置节点就记录在偶数头结点后面,两者是交替记录,因为我们用还是原来节点...遍历完后我们得到了奇偶两条链表链表头结点接到奇链表最尾端就可以了。 要注意一些节点为Null处理。

    22110

    LeetCode 328. Odd Even Linked List (Tag:LinkedList)

    >5->2->4->NULL Example 2: Input: 2->1->3->5->6->4->7->NULL Output: 2->3->6->7->1->5->4->NULL 翻译过来就是把链表改成前部分为奇数位置节点...,后面跟着偶数位置节点。...要注意是 关注点为节点位置,并不是节点值。 2. 思路 定义两个指针节点,分别为 指向奇数节点偶数节点 记录第一个偶数节点,后面要用最后一个奇数节点连上这个偶数节点。...遍历所有节点,结束条件是当前偶数节点或者奇数节点为null,或next为null; 奇数节点next = 偶数节点next 奇数节点 后移 偶数节点next = 奇数节点next 偶数节点后移...把最后一个奇数节点和第一个偶数节点连起来 返回head 3.

    33650

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

    奇偶链表 原题链接:328. 奇偶链表 题目描述: 给定单链表节点 head ,所有索引为奇数节点和索引为偶数节点分别组合在一起,然后返回重新排序列表。...题目要求我们所有奇数节点连在一块,所有偶数节点连在一块,且奇数链表偶数链表拼接。 必须在 O(1) 额外空间复杂度和 O(n) 时间复杂度下解决这个问题。...我们可以创建两个新链表,分别代表奇数链表偶数链表,第一个节点奇数,作为奇数链表节点;第二个节点偶数,作为偶数链表节点。...因为奇数偶数是交替,也就是奇数一个节点偶数偶数一个节点奇数。我们就可以所有奇数节点指向其后偶数节点下一节点偶数节点也指向其后奇数节点一个节点。...当我们遍历完原始链表,也就完成了奇数链表偶数链表节点连接,这时候奇数链表末尾节点指向偶数链表节点即可。

    43130

    空间复杂度与链表刷题

    链表链表结构不能直接从后向前遍历, 首先第一步, 寻找中间节点, 然后中间节点之后链表进行反转, 然后从头结点开始与中间节点之后链表值进行比较, 当然我们需要讨论链表奇数或者偶数情况,...但是不难发现, 如下图所示, 不管是奇数还是偶数, 都不影响, 我们只需要判断其中一个链表是否走到NULL....空间复杂度计算通常是以算法需要额外空间大小来衡量链表是一种常见数据结构,用于存储和操作一系列具有关联关系数据元素。...链表面试题常见有: 反转链表: 一个链表反转,即将链表节点逆序排列。 链表中倒数第k个节点: 找到链表中倒数第k个节点值。 链表是否有环: 判断一个链表是否存在环。...合并两个有序链表: 两个有序链表合并为一个有序链表。 删除链表重复元素: 删除链表中重复元素,使得每个元素只出现一次。

    7810

    每日算法系列【LeetCode 328】奇偶链表

    题目描述 给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。 请尝试使用原地算法完成。...链表一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。 题解 本题要求使用原地算法,也就是不允许额外新建一个链表,只能使用常数空间复杂度来实现。...要把奇数位置串起来,再把偶数位置串起来,最后把偶数位置链表接到奇数位置链表末尾。...因为 head 表示就是奇数位置链表一个结点,所以我们只需要再新建一个变量 even_head 指向 head->next ,也就是偶数位置链表一个结点。...最后把 odd 指向 odd->next ,把 even 指向 even->next ,继续遍历下一个结点。 什么时候停止呢?链表最后一个结点要么是奇数结点,要么是偶数结点。

    70310

    LeetCode 328:奇偶链表 Odd Even Linked List

    给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。 请尝试使用原地算法完成。...链表一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...解题思路: 这道题很简单,迭代链表,将该链表奇数节点偶数节点分别取出分隔成两个链表,然后奇偶两个链表连接起来组成新链表,返回头节点即可。...需要记录偶数节点一个节点,因为这是偶数链表节点,最后拼接链表时要用奇数链表节点连接该节点。...另外一种方法是以第一个奇偶节点开始,节点指向偶节点一个节点(肯定是奇节点),然后刷新奇链表,此时奇节点指向新加入节点节点指向奇节点一个节点(肯定是偶节点),然后刷新偶链表,此时偶节点指向新加入节点

    71910

    【一天一大 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

    LeetCode 328:奇偶链表 Odd Even Linked List

    给定一个链表,把所有的奇数节点偶数节点分别排在一起。请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。 请尝试使用原地算法完成。...链表一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。...,然后奇偶两个链表连接起来组成新链表,返回头节点即可。...需要记录偶数节点一个节点,因为这是偶数链表节点,最后拼接链表时要用奇数链表节点连接该节点。...另外一种方法是以第一个奇偶节点开始,节点指向偶节点一个节点(肯定是奇节点),然后刷新奇链表,此时奇节点指向新加入节点节点指向奇节点一个节点(肯定是偶节点),然后刷新偶链表,此时偶节点指向新加入节点

    62140

    LeetCode-143-重排链表

    # LeetCode-143-重排链表 给定一个链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯改变节点内部值,...: 这个解法复习内容挺多,按照题目规律,重排链表可以分为如下3个步骤 1 -> 2 -> 3 -> 4 -> 5 -> 6 第一步,链表平均分成两半 1 -> 2 -> 3 4 -> 5 -> 6...对于偶数链表,拆分中点在边界左边,对于奇数链表,中点就是中间那个 可以利用快慢指针来寻找中点,一个指针走2步,一个指针走1步,当快指针走到链表尾部时候,慢指针位置就是拆分中点,由于奇数偶数拆分点不一样...,所以ListNode newHead = slow.next;和slow.next = null;在找到边界点之后,始终后移1位,这样保证了偶数情况下,拆分点始终是第二个链表头部 但是对于奇数情况,...则会让第一个链表始终比第二个链表一个数字,这种情况在合并时候进行处理。

    31020

    链表专项之环形链表

    环形链表 给你一个链表节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。...无论x为奇数或者偶数 两者一定能相遇 同种情况下,fast走N步,slow走1步 依旧假设fast指针与slow指针之间距离为x 若fast指针一次走3步,slow指针一次走1步 则slow与fast...每走一次距离减少2 x-2,x-4,x-6,x-8,x-10..... x若为偶数则能成功遇见 ,若为奇数 就会一直错过 ,造成死循环 同理 若fast指针一次走4步,slow指针一次走1步 两者之间每次减少...若x为奇数则能成功遇见,若为偶数 就会一直错过,造成死循环 142. 环形链表 II 给定一个链表节点 head ,返回链表开始入环一个节点。 如果链表无环,则返回 null。...,这个公式需要推导下 它分为 正常情况与特殊情况 公式推导 1.正常情况 fast走2步,slow走1步 没循环链表距离为L ,slow在循环链表中走距离为X,循环链表一圈距离为C slow走长度为

    33620

    BFS,丑数问题-LeetCode 310、264、313、328、343(拆分链表

    图因此可以成为树,在所有可能树中,具有最小高度树被称为最小高度树。给出这样一个图,写出一个函数找到所有的最小高度树并返回他们节点。 格式 该图包含 n 个节点,标记为 0 到 n - 1。...给定一个链表,把所有的奇数节点偶数节点分别排在一起。...请注意,这里奇数节点偶数节点指的是节点编号奇偶性,而不是节点奇偶性。 请尝试使用原地算法完成。...我本来思路是想着奇偶位置节点进行一个交换,但是编程好麻烦,需要三个指针,看了官方答案,tql, 直接链表拆开成两条链表,使用一个指针保存新链表头部,最后再进行合并就好了!...,分别包含偶数奇数 } odd->next = evenHead; // evenHead用来指向第一个奇数位置节点 return head;

    48630

    数据结构:链表

    1.链表定义: 链表(Linked List)是一种常见基础数据结构,是一种线性表,但是并不会按线性顺序存储数据,而是在每一个节点里存到下一个节点指针(Pointer)。...链表通常由一连串节点组成,每个节点包含任意实例数据(data fields)和一或两个用来指向上一个/或下一个节点位置链接(links)。...而链表是一种自我指示数据类型,因为它包含指向另一个相同类型数据指针(链接)。 链表允许插入和移除表上任意位置上节点,但是不允许随机存取。链表有很多种不同类型:单向链表,双向链表以及循环链表。...两个链表合并:这个思路是,元素指向除了这个元素之外排序好链表即可,可以采用递归。...ok { // 偶数的话,合并之后链表作为新链表数组 lists = lists[:n] } else { // 奇数的话,需要将链表最后一个元素合并过来

    57920

    LeeCode24(交换链表

    这道题我用带虚拟头节点链表实现。 虚拟头节点(其实我以前都叫头节点我就叫虚拟头节点),可能很多人叫做哨兵节点,放在第一个元素节点之前,数据域一般没意义。...图解 先建立一个带虚拟头节点链表。 PS:此处代码为 Python(”代码实现“小节处有 Java 代码,下同)。...其中 pre 指向虚拟头节点,p 指向链表节点,q 指向链表第 2 个节点。 pre = dummyHead p = head q = p.next 节点两两交换主要分为 3 步。...= ListNode(-1) # 初始化pre、p 节点 pre = dummyHead p = head # 必须是节点数是偶数时候才能交换...# 如果最后只剩下一个节点,即链表奇数节点,最后一个不用反转 # 比如 head = [1,2, 3, 4, 5],输出 [2, 1, 4, 3, 5]

    25410

    常考算法面试题系列:链表操作

    链表 链表存储有序元素集合,但不同于数组,链表中每个元素在内存中并不是连续放置。每个元素由一个存储元素本身节点一个指向下一个元素节点(也称为指针或链接)组成,下图展示了一个链表结构。 ?...链表 由于不必须按顺序存储,链表在插入时候可以达到 O(1) 复杂度,但是查找一个节点或者访问特定编号节点则需要 O(n)时间....返回倒数第 k 个节点[4] 面试题52. 两个链表一个公共节点[5] 1. 反转链表 使用迭代:在遍历列表时,当前节点 next 指针改为指向前一个元素。...由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新头引用。 ?...,slow 指向链表中点 // 链表元素为偶数个时,slow 指向链表两个中点右边一个 return slow; }; 4.

    64530

    【递归、搜索与回溯算法练习】day2

    两两交换链表节点 1.题目简介 24. 两两交换链表节点 给你一个链表,两两交换其中相邻节点,并返回交换后链表节点。...2.解题思路 递归思路: 先处理第二个节点之后节点,再将前两个节点进行交换,最后连接后面处理好节点 迭代思路: 双指针法(三指针法) 两个指针进行交换,第三个指针进行遍历,直到链表遍历结束...cur = head -> next,* next = cur -> next; ListNode* newhead = cur; int flag = 1;//假设链表节点个数为偶数...while(next) { cur -> next = prev; if(next -> next)//链表节点个数是偶数个或者未到达链表结尾...prev = next; next = cur -> next; } else//如果链表结点个数是奇数

    12310
    领券