心得:有关链表的题目,多用中间变量,代码写得清晰一点,适当注释
代码:
ListNode *insertionSortList(ListNode *head) {
if (!head) return NULL; ListNode *curr = head->next;
ListNode *prev = head;
while (curr) {
ListNode *p = NULL;
ListNode *c = head;
// 寻找插入位置
while (c->val < curr->val) {
p = c;
c = c->next;
}
// 如果要插入的位置就是当前位置
if (c == curr) {
prev = curr;
curr = curr->next;
}
// 否则插入节点
else {
prev->next = curr->next;
curr->next = c;
if (!p) // 如果带插入的位置是队首
head = curr;
else // 普通情况
p->next = curr;
curr = prev->next;
}
} return head;
}