147. 对链表进行插入排序
Posted yuhong1103
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了147. 对链表进行插入排序相关的知识,希望对你有一定的参考价值。
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 //1、始终保持pre指向虚拟头结点 10 //2、cur为最后一个节点,即cur->next = NULL 11 class Solution 12 { 13 public: 14 ListNode* insertionSortList(ListNode* head) 15 { 16 if(head == NULL || head->next == NULL) return head; 17 ListNode* dummy = new ListNode(-1); 18 dummy->next = head; 19 20 ListNode* pre = dummy; 21 ListNode* cur = head; 22 23 head = head->next;// 24 while(head) 25 { 26 ListNode* h = head->next;//对head->next进行备份,因为后面要进行修改 27 ListNode* temp = pre;//因为始终保持pre指向虚拟头结点,所以防止修改要进行备份 28 for(;temp->next != cur;temp = temp->next) 29 { 30 if(temp->next->val > head->val)//如果head的值小于temp->next的值,则在head左边进行插入 31 { 32 head->next = temp->next; 33 temp->next = head; 34 break; 35 } 36 } 37 if(temp->next == cur) 38 { 39 if(temp->next->val > head->val)//如果head的值小于temp->next的值,则在head左边进行插入 40 { 41 head->next = cur; 42 temp->next = head; 43 } 44 else //否则在右边进行插入 45 { 46 cur->next = head; 47 cur = cur->next; 48 } 49 } 50 cur->next = NULL;//始终保持cur为最后一个节点 51 head = h; 52 } 53 return dummy->next; 54 } 55 };
以上是关于147. 对链表进行插入排序的主要内容,如果未能解决你的问题,请参考以下文章