首页 > 编程语言 >11.6 算法

11.6 算法

时间:2023-11-06 10:23:15浏览次数:27  
标签:even head ListNode cur 11.6 next 算法 odd

题目

奇偶链表
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

示例 1:

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

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

提示:

n ==  链表中的节点数
0 <= n <= 104
-106 <= Node.val <= 106

代码

ListNode* oddEvenList(ListNode* head) {
    if(head==nullptr || head->next == nullptr){
        return head;
    }
    ListNode *odd_head = head;
    ListNode *even_head = head->next;
    ListNode *odd_cur = odd_head;
    ListNode *even_cur = even_head;
    while( even_cur != nullptr && even_cur->next != nullptr){
        odd_cur->next = even_cur->next;
        odd_cur = odd_cur->next;
        even_cur->next = odd_cur->next;
        even_cur = even_cur->next;
    }
    odd_cur->next = even_head;
    return odd_head;
}

方案

将链表拆分为奇数链表和偶数链表,然后替换next,奇数并到偶数的后面就可以,while循环位置要看有没有用到空指针的可能性

标签:even,head,ListNode,cur,11.6,next,算法,odd
From: https://www.cnblogs.com/minipython-wldx/p/17811938.html

相关文章

  • 11.6日记
    继承是面向对象的三大特性之一,但很多时候使用继承的结果却不尽如人意。除了人尽皆知的紧耦合问题外,有的时候还会导致子类的快速膨胀。设想这样一个场景:最初设计的时候有一个类型Product,但后来随着新需求的出现,X原因导致了它的变化,X有两种情况,则通过继承需要创建两个新的子类Produc......
  • 排列算法
    马上交作业了,刚写到这样#include<stdio.h>#include<stdlib.h>intsort(intn[8]){inti,m;m=100;for(i=0;i<8;i++){if(m>n[i]){m=n[i];}}returnm;}intmain(){intresult;......
  • 排序算法
    目录1.选择排序2.冒泡排序3.插入排序4.快速排序给定数组:[12,23,8,15,33,24,77,55]1.选择排序选择排序的思路是从未排序的部分中选择最小的元素,然后将其与未排序部分的第一个元素交换。选择最小值为8,与第一个元素12交换,得到:[8,23,12,15,33,24,77,55]2.冒......
  • 随机数算法
    $rand()$范围:0-32767不是真正的随机,只是因为周期很长,看起来像如果不进行初始化,每次输出的结果是相同的#include<bits/stdc++.h>usingnamespacestd;signedmain(){ freopen("1.out","w",stdout); for(inti=1;i<=10;i++){ cout<<rand()&l......
  • 欧几里得算法
    目录1.欧几里得算法说明2.欧几里得算法伪代码3.测试伪代码1.欧几里得算法说明欧几里德(Euclidean)算法的基本原理就是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。因此我们可以不断地将这两个数相减,用新两个数(前面的较小值与差值)替代初值求最大公约数。因此......
  • 重新学习算法_Day2
    今天复习了栈先入后出和队列先进先出 ......
  • 异常检测算法-完全卷积数据描述子FCDD
    文献来源:EXPLAINABLEDEEPONE-CLASSCLASSIFICATION   最近在做一些异物检测之类的算法任务,原本想使用目标识别算法,但是问题是正样本太多,而负样本没几个。所以有必要使用异常检测算法,日后不妨再结合目标识别任务去做。在正式开始前,需要先简单介绍一个广义损失函数的东西......
  • 分治算法(C语言)
    一、棋盘覆盖问题1、问题2、分析(1)当k>0时,将2k×2k棋盘分割为4个(2k-1)×(2k-1)子棋盘,如图(a)所示。每一次分解,都将原本大小的棋盘,划分为四份,即行号和列号各自缩减一半。(2)特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。(3)为将无特殊方格子棋盘转化为特......
  • 【进阶算法】差分
    差分是一种类似于前缀和的编码技巧,可以快速实现对数组某个区间的所有元素增加或减少一个值。一、差分数组示例:数组arr=[8,1,3,-2,5,0,-3,6],输入m个操作,每个操作输入(L,R,val),表示对数组的[L,R]区间中每个元素增加val,要求输出最后的arr数组。比如,第1次操作,输入(0,2......
  • 排序算法
    快速排序......