[LeetCode]147 链表插入排序

来源:互联网 发布:2012年3d开奖数据 编辑:程序博客网 时间:2024/05/17 23:03

Insertion Sort List(链表插入排序)

【难度:Medium】
Sort a linked list using insertion sort.
对一个链表使用插入排序。


解题思路

基于插入排序的思想,从链表头开始遍历,找到第一个大于当前节点的链表节点,进行链表间的交换操作。由于链表的操作比较麻烦,因此链表的插入排序相比于数组的插入排序要复杂。


c++代码如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* insertionSortList(ListNode* head) {        if (!head || !head->next)            return head;        //虚节点作为新链表头        ListNode* dummy = new ListNode(INT_MIN);        //遍历节点        ListNode* cur = head;        //cur节点的前一个节点        ListNode* pre = dummy;        //cur节点的下一个节点        ListNode* cur_next = NULL;        while (cur) {            //先保留cur的下一个节点            cur_next = cur->next;            //pre的下一个节点的值大于cur节点的值            while (pre->next && pre->next->val < cur->val)                pre = pre->next;            //增加新链表中的节点            cur->next = pre->next;            pre->next = cur;            pre = dummy;            cur = cur_next;        }        //去掉虚节点        return dummy->next;    }};

数组的插入排序c++代码如下:

#include<iostream>#include<vector> using namespace std;void insertSort(vector<int>& array) {    int n = array.size();    for (int i = 1; i < n; i++) {        //找到比前面一个数更小的         if (array[i-1] > array[i]) {            int current = array[i];            int j = i;            //找到合适的插入位置            while (j > 0 && array[j-1] > current) {                array[j] = array[j-1];                j--;            }            array[j] = current;        }    }}
0 0
原创粉丝点击