前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021-11-07:奇偶链表。给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节

2021-11-07:奇偶链表。给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节

作者头像
福大大架构师每日一题
发布2021-11-16 10:29:29
5120
发布2021-11-16 10:29:29
举报
文章被收录于专栏:福大大架构师每日一题

2021-11-07:奇偶链表。给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。力扣328。

答案2021-11-07:

自然智慧即可。拆分成两个链表,然后合并。

时间复杂度:O(N)。

额外空间复杂度:O(1)。

代码用golang编写。代码如下:

代码语言:javascript
复制
package main

import "fmt"

func main() {
    head := &ListNode{val: 1}
    head.next = &ListNode{val: 2}
    head.next.next = &ListNode{val: 3}
    head.next.next.next = &ListNode{val: 4}
    head.next.next.next.next = &ListNode{val: 5}
    oddEvenList(head)
    for head != nil {
        fmt.Println(head)
        head = head.next
    }
}

type ListNode struct {
    val  int
    next *ListNode
}

func oddEvenList(head *ListNode) *ListNode {
    var firstOdd *ListNode
    var firstEven *ListNode
    var odd *ListNode
    var even *ListNode
    var next *ListNode
    count := 1
    for head != nil {
        next = head.next
        head.next = nil
        if (count & 1) == 1 {

            firstOdd = twoSelectOne(firstOdd == nil, head, firstOdd)
            if odd != nil {
                odd.next = head
            }
            odd = head
        } else {
            firstEven = twoSelectOne(firstEven == nil, head, firstEven)
            if even != nil {
                even.next = head
            }
            even = head
        }
        count++
        head = next
    }
    if odd != nil {
        odd.next = firstEven
    }
    return twoSelectOne(firstOdd != nil, firstOdd, firstEven)
}

func twoSelectOne(c bool, a, b *ListNode) *ListNode {
    if c {
        return a
    } else {
        return b
    }
}

执行结果如下:

[左神java代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class34/Problem_0328_OddEvenLinkedList.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档