插入排序列表 C++
假设我们有一个链表,我们需要对这个链表进行插入排序。所以,如果链表是 [9,45,23,71,80,55],排序后的链表就是 [9,23,45,55,71,80]。
为了解决这个问题,我们将按照以下步骤进行 −
dummy := 具有随机值的新节点
node := 给定的链表
当 node 不为空时,
newNode = node 的下一个,dummyHead := dummy 的下一个,prevDummyHead := dummy
当 true 时 −
如果 dummyHead 不存在,dummyHead 的值大于 node 的值
node 的下一个 := dummyHead
prevDummyHead 的下一个 := node
跳出循环
prevDummyHead := dymmyHead,dummyHead = dummy head 的下一个
node := 下一个节点
- 返回 dummy 的下一个
示例
让我们看看以下实现,以获得更好的理解 −
class Solution { public: ListNode* insertionSortList(ListNode* a) { ListNode* dummy = new ListNode(-1); ListNode* node = a; ListNode* nextNode; ListNode* dummyHead; ListNode* prevDummyHead; while(node != NULL){ nextNode = node->next; dummyHead = dummy->next; prevDummyHead = dummy; while(1){ if(!dummyHead || dummyHead->val > node->val){ node->next = dummyHead; prevDummyHead->next = node; //cout << prevDummyHead->val << " " << node->val << endl; break; } } prevDummyHead = dummyHead; dummyHead = dummyHead->next; } node = nextNode; } return dummy->next; }
输入
[9,45,23,71,80,55]
输出
[9,23,45,55,71,80]
广告