Golang | Leetcode Golang题解之第148题排序链表

题目:

题解:

Go 复制代码
func merge(head1, head2 *ListNode) *ListNode {
    dummyHead := &ListNode{}
    temp, temp1, temp2 := dummyHead, head1, head2
    for temp1 != nil && temp2 != nil {
        if temp1.Val <= temp2.Val {
            temp.Next = temp1
            temp1 = temp1.Next
        } else {
            temp.Next = temp2
            temp2 = temp2.Next
        }
        temp = temp.Next
    }
    if temp1 != nil {
        temp.Next = temp1
    } else if temp2 != nil {
        temp.Next = temp2
    }
    return dummyHead.Next
}

func sortList(head *ListNode) *ListNode {
    if head == nil {
        return head
    }

    length := 0
    for node := head; node != nil; node = node.Next {
        length++
    }

    dummyHead := &ListNode{Next: head}
    for subLength := 1; subLength < length; subLength <<= 1 {
        prev, cur := dummyHead, dummyHead.Next
        for cur != nil {
            head1 := cur
            for i := 1; i < subLength && cur.Next != nil; i++ {
                cur = cur.Next
            }

            head2 := cur.Next
            cur.Next = nil
            cur = head2
            for i := 1; i < subLength && cur != nil && cur.Next != nil; i++ {
                cur = cur.Next
            }

            var next *ListNode
            if cur != nil {
                next = cur.Next
                cur.Next = nil
            }

            prev.Next = merge(head1, head2)

            for prev.Next != nil {
                prev = prev.Next
            }
            cur = next
        }
    }
    return dummyHead.Next
}
相关推荐
我的golang之路果然有问题1 小时前
云服务器部署Gin+gorm 项目 demo
运维·服务器·后端·学习·golang·gin
孔令飞2 小时前
Go 为何天生适合云原生?
ai·云原生·容器·golang·kubernetes
YGGP5 小时前
吃透 Golang 基础:数据结构之 Map
开发语言·数据结构·golang
march of Time5 小时前
go工具库:hertz api框架 hertz client的使用
开发语言·golang·iphone
dying_man6 小时前
LeetCode--24.两两交换链表中的结点
算法·leetcode
yours_Gabriel6 小时前
【力扣】2434.使用机器人打印字典序最小的字符串
算法·leetcode·贪心算法
余厌厌厌6 小时前
go语言学习 第9章:映射(Map)
服务器·学习·golang
roman_日积跬步-终至千里7 小时前
【Go语言基础【15】】数组:固定长度的连续存储结构
golang
GGBondlctrl8 小时前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想
cccc来财8 小时前
Go中的协程并发和并发panic处理
开发语言·后端·golang