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
}
相关推荐
2301_807997382 小时前
代码随想录-day26
数据结构·c++·算法·leetcode
小欣加油2 小时前
leetcode 3318 计算子数组的x-sum I
c++·算法·leetcode·职场和发展
海琴烟Sunshine4 小时前
leetcode 190. 颠倒二进制位 python
python·算法·leetcode
海琴烟Sunshine4 小时前
leetcode 338. 比特位计数 python
python·算法·leetcode
豆浆whisky7 小时前
Go内存管理最佳实践:提升性能的Do‘s与Don‘ts|Go语言进阶(17)
开发语言·后端·golang
被AI抢饭碗的人9 小时前
算法题(254):灾后重建
算法·leetcode·职场和发展
Yeats_Liao10 小时前
Go Web 编程快速入门 18 - 附录B:查询与扫描
开发语言·前端·后端·golang
小八四爱吃甜食10 小时前
【R语言】构建GO、KEGG相关不同物种的R包
开发语言·golang·r语言
Kuo-Teng21 小时前
Leetcode438. 找到字符串中所有字母异位词
java·算法·leetcode
赵文宇(温玉)21 小时前
构建内网离线的“github.com“,完美解决内网Go开发依赖
开发语言·golang·github