leetcode.328奇偶链表——Javascript实现方案

简介: leetcode.328奇偶链表——Javascript实现方案

前言

今天刷了几道链表的经典问题,难度有简单的,也有中等,特意在此记录一下,和大家分享解题过程和思路

e66e3593221f522bf9b3307a1136850.png

奇偶链表

描述


给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

示例


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

解析


  • 题目中已经说明是要区分奇数和偶数的节点,一般都这么说的题目,都会用到双指针来处理。如果是数组,我们很好处理,但是如果是链表,指针只能向前,不能向后,这一点需要特别注意。
  • 奇偶指针循环链表,奇数指针不断串连奇数节点,偶数指针不断串连偶数节点,最后奇数指针的结尾连接偶数节点的开始
  • 首先判断如果输入为空,那么直接返回null
  • 定义两个指针,odd 指向奇数位,even 指向偶数位
  • 奇数位next指向,偶数位的next.(偶数位的下一位肯定是奇数位)
  • 同理,偶数位next指向,奇数位的next.(奇数位的下一位肯定是偶数位)
  • 当偶数指针为空时,循环结束。
  • 最后奇数位的next 指向偶数位的链表
  • 时间复杂度在O(n)
  • 空间复杂杜在O(1)

代码


var oddEvenList = function(head) {
    if (head === null) {
        return head;
    } // 如果输入为空,那么直接返回null
    let evenHead = head.next;
    let odd = head, even = evenHead;
    while (even !== null && even.next !== null) {
        odd.next = even.next;
        odd = odd.next;
        even.next = odd.next;
        even = even.next;
    }
    odd.next = evenHead;
    return head;

一句话总结


奇偶两个指针 指针每次都间隔一个跳跃 循环结束把奇数链表next指向偶数链表的开头

原题链接


leetcode.cn/problems/od…




相关文章
|
29天前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
33 1
|
1月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
47 0
Leetcode第21题(合并两个有序链表)
|
2月前
|
自然语言处理 JavaScript 前端开发
一文梳理JavaScript中常见的七大继承方案
该文章系统地概述了JavaScript中七种常见的继承模式,包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合继承等,并探讨了每种模式的实现方式及其优缺点。
一文梳理JavaScript中常见的七大继承方案
|
1月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
17 0
LeetCode第二十四题(两两交换链表中的节点)
|
1月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
40 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
1月前
|
JavaScript 前端开发
原生js常见报错及其处理方案
原生js常见报错及其处理方案
18 0
|
1月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
77 0
|
1月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
21 0
|
1月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
16 0
|
1月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
12 0