Insertion Sort List

解题思路:
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 }

 

posted @ 2016-05-08 18:23  米开朗菠萝  阅读(185)  评论(0编辑  收藏  举报