147 对链表进行插入排序-中等
题目:
给定单链表的头 head,使用 插入排序 对链表进行排序,并返回 排序后的链表的头。
分析:
为了代码简洁我们写一个已排序的链表中插入单个节点的辅助函数。
// date 2023/10/16
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func insertionSortList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
cur := head.Next
newHead := head
newHead.Next = nil
for cur != nil {
after := cur.Next
cur.Next = nil
newHead = insertOneNode(newHead, cur)
cur = after
}
return newHead
}
func insertOneNode(head, node *ListNode) *ListNode {
if node.Val < head.Val {
node.Next = head
head = node
return head
}
pre := head
cur := head.Next
for cur != nil && cur.Val <= node.Val {
pre = cur
cur = cur.Next
}
node.Next = cur
pre.Next = node
return head
}
最后更新于