单链表插入排序
2017-10-10 16:55
274 查看
代码自己实现过一遍就是有更加深入的理解:
上文中head节点初始化,其他节点的初始化是很重要的问题。
未初始化很容易出现debug版本没问题,而release版本不通过的现象。
同时注意到head节点是空节点,并不是头结点,所以要小心处理有关head节点的情况
node* insert_sort() { int data = 0; int i = 0; node *head, *Cur, *Pre, *New; head = (node*)malloc(sizeof(node)); while(1) { printf("Please input the data: "); scanf("%d", &data); if(data == 0) break; New = (struct node*)malloc(sizeof(struct node)); Pre = (struct node*)malloc(sizeof(struct node)); Cur = (struct node*)malloc(sizeof(struct node)); New->data = data; // 新分配一个node节点 New->next = NULL; if(++i == 1) { head->next = New; continue; } if(head->next->data >= New->data) { New->next = head->next; head->next = New; continue; } Cur = head->next; while(New->data > Cur->data && Cur->next != NULL) { Pre = Cur; Cur = Cur->next; } if(Cur->data >= New->data) { Pre->next = New; New->next = Cur; } else { Cur->next = New; } } return head; }
上文中head节点初始化,其他节点的初始化是很重要的问题。
未初始化很容易出现debug版本没问题,而release版本不通过的现象。
同时注意到head节点是空节点,并不是头结点,所以要小心处理有关head节点的情况
相关文章推荐
- 对链表数据进行插入排序
- <数据结构>单链表元素按插入方法排序实现
- 【lintcode】——链表插入排序-Insertion Sort List
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- 链表插入、链表相加、链表相乘、链表排序、链表合并等操作的java实现
- 单向链表:在插入值的同时要进行排序
- 链表:插入,删除,显示,排序
- 单链表---直接插入排序
- LintCode 链表插入排序
- 每天一道LeetCode-----链表插入排序
- 实现单链表插入排序
- javascript数据结构之双链表插入排序实例详解
- LintCode-链表插入排序
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)
- 第一类:链表的考察(链表的插入,删除,排序和逆转等)
- LintCode(E) 链表插入排序
- 链表排序-直接插入排序
- 链表的创建、插入、删除、排序和逆置
- LeetCode-147. Insertion Sort List (JAVA)链表插入排序
- LeetCode 147. Insertion Sort List插入排序链表的高效简单解法