问题描述: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;
}
};