给定一个奇数位升序,偶数位降序的链表,返回对其排序后的链表。
题面解释:例如链表 1->3->2->2->3->1 是奇数位升序偶数位降序的链表,而 1->3->2->2->3->2 则不符合题目要求。
数据范围:链表中元素个数满足
,链表中的元素大小满足 
func sortLinkedList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
var jishu []int
var oushu []int
num := 1
for head != nil {
if num%2 == 0 {
oushu = append(oushu, head.Val)
} else {
jishu = append(jishu, head.Val)
}
head = head.Next
num++
}
sort.Slice(jishu, func(i, j int) bool {
return jishu[i] < jishu[j]
})
sort.Slice(oushu, func(i, j int) bool {
return oushu[i] > oushu[j]
})
var ret []int
for i := 0; i < len(jishu); i++ {
ret = append(ret, jishu[i])
if i < len(oushu) {
ret = append(ret, oushu[i])
}
}
var retNode *ListNode
p := retNode
for _, val := range ret {
if retNode == nil {
retNode = &ListNode{Val: val}
p = retNode
} else {
retNode.Next = &ListNode{Val: val}
retNode = retNode.Next
}
}
return p
} package main
import "sort"
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
func sortLinkedList( head *ListNode ) *ListNode {
arr:=[]*ListNode{}
for p:=head;p!=nil;p=p.Next{
arr=append(arr,p)
}
sort.Slice(arr,func(i,j int)bool{
return arr[i].Val<arr[j].Val
})
for i,ln:=range arr{
if i+1<len(arr){
ln.Next=arr[i+1]
}else{
ln.Next=nil
}
}
return arr[0]
}