题解 | #单链表的排序#

单链表的排序

https://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08

package main

import . "nc_tools"

/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 *
 * @param head ListNode类 the head node
 * @return ListNode类
 */
func sortInList(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	mid := head
	p := head
	for p != nil && p.Next != nil {
		p = p.Next
		if p != nil {
			p = p.Next
		}
		if p != nil {
			mid = mid.Next
		}
	}
	next := mid.Next
	mid.Next = nil
	left := sortInList(head)
	right := sortInList(next)
	p = left
	q := right
	var r *ListNode
	var root *ListNode
	for p != nil || q != nil {
		if q == nil || (p != nil && p.Val <= q.Val) {
			if r == nil {
				r = p
				root = r
			} else {
				r.Next = p
				r = r.Next
			}
			p = p.Next
			continue
		}
		if p == nil || (q != nil && p.Val > q.Val) {
			if r == nil {
				r = q
				root = r
			} else {
				r.Next = q
				r = r.Next
			}
			q = q.Next
		}
	}
	return root
	// write code here
}

全部评论

相关推荐

10-17 17:14
门头沟学院 C++
牛客410039819号:北京地区大多是919和927,这两场挂太多人了
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务