147. Insertion Sort List

来源:互联网 发布:高中免费听课软件 编辑:程序博客网 时间:2022/05/28 06:31

问题描述:Sort a linked list using insertion sort.

分析:链表插入排序需要建立一个新的链表,按序遍历,让新链表中的合适节点指向新的节点

代码:

class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        ListNode* new_head = new ListNode(0);//新链表的表头
        new_head -> next = head;插入第一个头节点
        ListNode* pre = new_head;
        ListNode* cur = head;//cur表示当前待插入的节点
        while (cur) {//从头结点开始依次插入

//判断新节点的插入位置,若小于前一个节点,遍历寻找插入位置
            if (cur -> next && cur -> next -> val < cur -> val) {
                while (pre -> next && pre -> next -> val < cur -> next -> val)
                    pre = pre -> next;

//指向操作
                ListNode* temp = pre -> next;
                pre -> next = cur -> next;
                cur -> next = cur -> next -> next;
                pre -> next -> next = temp;
                pre = new_head;
            }

//当节点的值大于前一个节点是,前一个节点指向当前节点

            else cur = cur -> next;
        }
        ListNode* res = new_head -> next;
        delete new_head;
        return res;
    }
};

原创粉丝点击