IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【牛客刷题】链表的奇偶重排 -> 正文阅读

[数据结构与算法]【牛客刷题】链表的奇偶重排

🍍每日推荐

🍖文章开始之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下

访问链接:牛客-国内最大的刷题网站

题目

在这里插入图片描述

题意整理

  • 给定一个链表。
  • 链表的奇数位、偶数位索引节点分别连在一起,重排成一个新的链表。

方法一(转化为数组)

1.解题思路

比较容易实现的方法是先将链表转化为数组,然后分别将奇数、偶数索引对应的值构造成对应的奇偶链表。最后再将奇链表和偶链表拼接起来。

2.代码实现

import java.util.*;
 
/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
 
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode oddEvenList (ListNode head) {
        //特殊情况判断
        if(head==null||head.next==null) return head;
 
        // 计算链表长度
        int len=0;
        ListNode cur=head;
        while(cur!=null){
            cur=cur.next;
            len++;
        }
 
        //转换为数组
        int[] arr=new int[len];
        int id=0;
        cur=head;
        while(cur!=null){
            arr[id++]=cur.val;
            cur=cur.next;
        }
 
        //数组转化为奇偶链表,并连接在一起
        ListNode oddCur=new ListNode(arr[0]);
        ListNode evenCur=new ListNode(arr[1]);
        ListNode oddHead=oddCur;
        ListNode evenHead=evenCur;
        for(int i=2;i<arr.length;i++){
            if(i%2==0){
                oddCur.next=new ListNode(arr[i]);
                oddCur=oddCur.next;
            }
            else{
                evenCur.next=new ListNode(arr[i]);
                evenCur=evenCur.next;
            }
        }
        //拼接
        oddCur.next=evenHead;
        return oddHead;
 
    }
}

3.复杂度分析

时间复杂度:需要遍历两次链表和一次数组,所以时间复杂度为图片说明 。
空间复杂度:需要额外长度为n的数组存储元素,所以空间复杂度为图片说明。

方法二(原地拆分再合并)

1.解题思路

核心思路是遍历链表,每次记录当前节点的下一个节点,然后将当前节点指向下一个节点的后一位,之后指针移动到之前保留的下一个节点处。
主要步骤:

  • 判断链表为空或只有一个节点的情况
  • 初始化偶链表头指针、当前节点、奇链表最后停留的节点
  • 遍历链表,拆分为奇偶链表,并记录长度
  • 根据长度判断奇链表最后一个节点,合并奇偶链表

动图展示:
在这里插入图片描述

2.代码实现

import java.util.*;
 
/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
 
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode oddEvenList (ListNode head) {
        //特殊情况判断
        if(head==null||head.next==null) return head;
 
        //初始化
        ListNode evenHead=head.next;
        ListNode cur=head;
        ListNode oddTail1=null,oddTail2=null;
 
        //拆分为奇偶链表,并记录长度
        int len=1;
        while(cur.next!=null){
            len++;
            oddTail1=cur.next;
            oddTail2=cur;
 
            //保留下一个节点
            ListNode next=cur.next;
            //拆分
            cur.next=cur.next.next;
            //指针后移到下一个节点
            cur=next;
        }
 
        //如果原链表长度是奇数,则链表最后一个节点是奇数链表尾节点
        if(len%2==1){
            //合并
            oddTail1.next=evenHead;
        }
        //如果原链表长度是偶数,则链表倒数第二个节点是奇数链表尾节点
        else{
            //合并
            oddTail2.next=evenHead;
        }
        return head;
 
    }
}

3.复杂度分析

时间复杂度:只需要遍历一次链表,所以时间复杂度为图片说明。
空间复杂度:需要额外常数级别的内存空间,所以空间复杂度为图片说明

4.提交代码

在这里插入图片描述

🍍每日推荐

访问链接:牛客-国内最大的刷题网站

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:36:44  更:2022-09-04 01:37:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:31:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码