奇偶链表。给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。
  KRe60ogUm4le 2024年05月31日 18 0

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

自然智慧即可。拆分成两个链表,然后合并。
时间复杂度:O(N)。
额外空间复杂度:O(1)。

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

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
    }
}

执行结果如下:
2021-11-07:奇偶链表。给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月31日 0

暂无评论

推荐阅读
  KRe60ogUm4le   2024年05月31日   29   0   0 算法leetcodepython
KRe60ogUm4le
最新推荐 更多

2024-05-31