解题思路:
1.这个就是链表有序插入的变形
2.要设置4个指针,插入,查询,插入前,查询前指针
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 struct ListNode* insertionSortList(struct ListNode* head) { 9 struct ListNode* insert; 10 struct ListNode* insert_p; 11 struct ListNode* cur; 12 struct ListNode* cur_p; 13 int flag; 14 if(head == NULL) 15 return NULL; 16 insert_p = head; 17 insert = head->next; 18 while(insert != NULL){ 19 cur = head; 20 cur_p = head; 21 flag = 0; 22 while(cur != insert){ 23 if(head->val > insert->val){ //插入头结点,要注意交换次序 24 insert_p->next = insert->next; 25 insert->next = head; 26 head = insert; 27 insert = insert_p->next; 28 flag = 1; 29 break; 30 } 31 else if(cur->val > insert->val){ 32 insert_p->next = insert->next; 33 cur_p->next = insert; 34 insert->next = cur; 35 insert = insert_p->next; 36 flag = 1; 37 break; 38 } 39 cur_p = cur; 40 cur = cur->next; 41 } 42 if(flag == 0){ //flag用来查看是否插入,插入的话insert已经移到下一个位置,就不用在移动了 43 insert_p = insert; 44 insert = insert->next; 45 } 46 } 47 return head; 48 }