题目
使用插入排序对链表进行排序。
Sort a linked list using insertion sort.
输入
{3,2,4}
输出
{2,3,4}
思路
1、若要实现插入排序,则需要先明白插入排序的原理。通俗讲便是将一个无序的数组(链表)插入有序的数组(链表)中,详细做法为:将无序数组的第一个元素切割出来作为有序数组的第一个元素,再将无序数组的第二个元素切割出来插入有序数组的相应位置,再将…,直至切割完整个无序数组。
2、本题思想,构建一个新的链表头,将原链表中的结点依次插入新链表中。
3、本题重点,构建一个新链表头,该链表头成为哑结点(ListNode dummy),该头结点不存储元素,而是始终指向首个结点,用来定位。
4、本题代码中,While循环里的插入节点操作时通用的,无论是首个结点的插入,或是中间结点的插入,亦或是尾结点的插入,都是可行的。
Ps:
常见算法比较
冒泡:每次遍历前n个元素,前后两两比较筛选出最大的元素放在数组尾,再n- -。
选择:每次遍历后n个元素,将首个元素与其他元素比较选取最小的元素放在首位,再n- -。
代码