Sort a linked list using insertion sort.
//以下用于有序链表插入一个元素
//插入有俩部分,最好弄成俩张链表,否则易出现错误!
void SortedInsert(struct ListNode* head, struct ListNode* newNode) //将元素插入有序表中!
{
struct ListNode* cur = head;
if (head == NULL || (head)->val>= newNode->val) //比头结点大
{
newNode->next = head;
head = newNode;
}
else {
//定位节点插入位置-- o*o*o* o null(o为要插入的位置!首插法)
while (cur->next!=NULL && cur->next->val<newNode->val) // 特别注意是先判断在取值,否则出现异常!取下一个值比较
{
cur = cur->next;
}
newNode->next = cur->next;
cur->next = newNode;//以上俩句用于插入!
}
}
ListNode * InsertSort(struct ListNode* head) {
struct ListNode* result = NULL; // 用于拆分出一张新链表注意!这个很关键!
struct ListNode* cur = head;
struct ListNode* next;
while (current!=NULL) {
next = cur->next; // 先保存下一个位置防止找不到!
SortedInsert(result, cur);
cur = next;
}
head = result;
return head;
}
//插入有俩部分,最好弄成俩张链表,否则易出现错误!
//定位节点插入位置-- o*o*o* o null(o为要插入的位置!首插法)