6.链表的删除
删除结点一定要记得free不然回造成内存泄漏!!!
int list_delete(linklist H, int pos){ linklist p, q; //1 H is NULL? if (H == NULL){ puts("H is NULL"); return -1; } //2 locate prior p = list_get(H, pos - 1); if (p == NULL) return -1; else if (p->next == NULL){ puts("delete pos is invalid"); return -1; } //3 update list q = p->next; p->next = q->next; //4 free printf("free:%d\n", q->data); free(q); q = NULL; return 0; }
7.链表释放
linklist list_free(linklist H){ linklist p; if (H == NULL) return -1; p = H; printf("free:"); while (H != NULL){ p = H; H = H->next; printf("%d ", p->data); free(p); } puts(""); return 0; }
free之后记得进行一个接收
所有的示例文件都可以在我上面给的链接里找到,可以跟着我一起进行学习敲一敲哦,这样才能有更大的进步。
链表应用举例
1.单链表H倒置
依次取原链表中各结点,将其作为新链表首结点插入H结点之后。
int list_reverse(linklist H){ linklist p, q; if (H == NULL){ puts("H is NULL"); return -1; } if (H->next == NULL || H->next->next == NULL){ return 0; } p = H->next->next; H->next->next = NULL; while(p){ q = p; p = p->next;//get a node q->next = H->next; H->next = q; } return 0; }
2.链表求两个相连结点最大值
设结点data域为整数,求链表中相邻两结点data值之和为最大的第一结点的指针。
linklist list_adjmax(linklist H, data_t *value){ linklist p, q, r; if(H == NULL){ puts("H is NULL"); return NULL; } if(H->next == NULL || H->next->next == NULL || H->next->next->next == NULL){ return H; } q = H->next; p = H->next->next; r = q; int sum = q->data + p->data; while(p->next != NULL){ p = p->next; q = q->next; if(sum < q->data + p->data){ sum = q->data + p->data; r = q; } } *value = sum; return r; }
3.有序链表的合并
int list_merge(linklist H1, linklist H2){ linklist p, q, r; if (H1 == NULL || H2 == NULL){ printf("H1 || H2 is NULL\n"); return -1; } p = H1->next; q = H2->next; r = H1; H1->next = NULL; H2->next = NULL; while(p && q){ printf("%d\n",p->data); if (p->data <= q->data){ r->next = p; p = p->next; r = r->next; r->next = NULL; } else{ r->next = q; q = q->next; r = r->next; r->next = NULL; } } if (p == NULL){ r->next = q; } else { r->next = q; } return 0; }
写在最后
终于写完链表了,喜大普奔,今天很多内容需要去gitee仓库里找我练习的代码跟着写来理解,大家加油,接下来的几天时间会继续了解各种数据结构,因为这部分之前我没写完所以更新有点慢,大家和我一起变强呀!最后三连即可提高学习效率!!!
另外我在更新的就是算法笔记的一些例题笔记,这个系列是用于提高我的算法能力,如果有兴趣对算法领域感兴趣找不到合适的入门文章也可以追更,如果我更新的太慢了请大家点赞收藏,一键三连才能更有更新的动力呀0.0