心得:有关链表的题目,多用中间变量,代码写得清晰一点,适当注释
代码:
1 ListNode *insertionSortList(ListNode *head) { 2 if (!head) return NULL; 3 4 ListNode *curr = head->next; 5 ListNode *prev = head; 6 while (curr) { 7 ListNode *p = NULL; 8 ListNode *c = head; 9 // 寻找插入位置 10 while (c->val < curr->val) { 11 p = c; 12 c = c->next; 13 } 14 // 如果要插入的位置就是当前位置 15 if (c == curr) { 16 prev = curr; 17 curr = curr->next; 18 } 19 // 否则插入节点 20 else { 21 prev->next = curr->next; 22 curr->next = c; 23 if (!p) // 如果带插入的位置是队首 24 head = curr; 25 else // 普通情况 26 p->next = curr; 27 curr = prev->next; 28 } 29 } 30 31 return head; 32 }