首页 > 编程知识 正文

链表的归并排序(pow是什么函数)

时间:2023-05-06 03:51:14 阅读:96982 作者:3027

2021-03-16:手写代码:单链表归并排序。

福大大答案2021-03-16:

获取链表中点,然后按中点分成两个链表。递归两个链表。合并两个链表。

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

包装主体

导入“fmt”

func main(){ 0

//head :=ListNode { val : 4 }

//头。下一个=列表节点{Val: 2}

//头。下一个。下一个=列表节点{Val: 1}

//头。下一个,下一个,下一个

head :=ListNode{Val: -1}

头部。下一个=列表节点{Val: 5}

头部。下一个。下一个=列表节点{Val: 3}

头部。下一个,下一个,下一个

头部。下一个。下一个。下一个。下一个=列表节点{Val: 0}

printlnLinkNodeList(标题)

head=合并排序(负责人)

printlnLinkNodeList(标题)

}

//单链表的定义。

类型列表节点结构(

Val int

下一个*列表节点

}

//链表打印

func printlnLinkNodeList(head * ListNode){ 0

cur :=头部

为了cur!=零

fmt .打印(曲线瓦尔,' t ')

cur=cur .然后

}

fmt .Println()

}

//归并排序

func合并排序(head * ListNode)* ListNode {

如果head==nil || head .下一个==零

返回头

}

ret :=过程(头)

返回浸水使柔软

}

//递归头儿不可能为空

功能进程(标题*列表节点)*列表节点{

//如果只有一个节点,直接返回

如果头部。下一个==零

返回头

}

//获取中点

mid :=getMid(head)

midNext :=mid .然后

//按中点拆分链表

中间。下一个=零

//递归

左:=进程(头)

右:=进程(midNext)

//合并

返回合并(左,右)

}

//找中点头儿一定不为空

func getMid(head * ListNode)* ListNode {

fast :=head

慢速:=头部

为了快速。下一个!=零快。下一个,下一个!=零

快=快。下一个,下一个

慢=慢。然后

}

缓慢返回

}

//合并,左侧和正确一定都不为空

func merge(左*列表节点,右*列表节点)*列表节点{

preAns :=列表节点{}

preAnsEnd :=preAns

向左!=零右!=零

如果离开瓦尔=右。瓦尔

预发送。下一个=左边

左=左。然后

} else {

预发送。下一个=右

右=右。然后

}

预发送=预发送.然后

}

if left==nil {

预发送。下一个=右

} else {

预发送。下一个=左边

}

返回传教士.然后

}执行结果如下:

***

[力扣148.排序链表](https://leet代码-cn。com/问题/排序列表/

[评论】(https://用户。qzone。QQ。com/3182319461/blog/1615849143)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。