LeetCode147. 对链表进行插入排序
1. 问题描述
2. 思路
- 遍历链表,找到开始下降的断点处
1.1. 遍历链表找到要插入的位置 - 插入
3. 代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func insertionSortList(head *ListNode) *ListNode {
header := &ListNode {
Val : 0,
Next : head,
}
var pre *ListNode
for head != nil && head.Next != nil {
// head.Next开始下降
if head.Val <= head.Next.Val {
head = head.Next
continue
}
// 找到head.Next要插入的位置
pre = header
for pre.Next.Val < head.Next.Val {
pre = pre.Next
}
// 在pre后插入head.Next
node := head.Next
head.Next = node.Next
node.Next = pre.Next
pre.Next = node
}
return header.Next
}