链表的创建,清空,插入,删除

typedef int (* __compfunc)(const void *, const void *);

//Traverse list. Fast macro to traverse the list.
#define linklist_next(al) \
      ((al) && ((al)=(al)->next) ? (al)->data : NULL) typedef struct linklist
{
  void *  data;
  struct linklist *  next;
} linklist_t; //Allocate a new list data structure
linklist_t * linklist_create()
{
linklist_t *ll;
ll = (linklist_t *) calloc(, sizeof(linklist_t));
return ll;
} //Destroy the list ll.
void linklist_destroy(linklist_t *ll)
{
if (ll) {
linklist_t *current = NULL;
while ((current=ll)) {ll = ll->next; free(current);}
}
} //Insert an element at the tail of a list.
int linklist_add(linklist_t *ll, void *data)
{
if (ll) {
linklist_t *node = NULL;
if ((node=(linklist_t *)calloc(, sizeof(linklist_t))) == )
return -;
while (ll->next) ll = ll->next;
node->data = data;
node->next = ll->next;
ll->next = node;
return ;
}
return -;
} //Remove element from the list.
int linklist_remove(linklist_t *ll, void *data)
{
if (ll) {
linklist_t *prev = NULL;
while (ll->next) {
prev = ll;
ll = ll->next;
if (ll->data == data) {
prev->next = ll->next;
free(ll);
return ;/* Success */
}
}//while
}
return ; /* object not found or NULL list */
} // Do an insertion sort algorithm on the list. An empty list is already
// sorted and so is a single element list.
int linklist_insert(linklist_t *ll, void *data, __compfunc cbcomp)
{
if (ll) {
linklist_t *node=NULL, *prev=NULL;
if (!cbcomp)
return linklist_add(ll, data);
if ((node=(linklist_t *)calloc(, sizeof(linklist_t))) == )
return -;
node->data = data;
if (!ll->next) {
ll->next = node;
return ;
}
for (prev=ll,ll=ll->next; ll; prev=ll,ll=ll->next) {
if (cbcomp(data, ll->data) <= ) {
prev->next = node;
node->next = ll;
return ;
}
}
prev->next = node;
}
return ;
} 4.链表的逆序
  1. LinkNode* ReverseLink(LinkNode* head)
  2. {
  3. LinkNode *prev=NULL, *next=NULL;
  4. while(head)
  5. {
  6. next = head->next;
  7. head->next = prev;
  8. prev = head;
  9. head = next;
  10. }
  11. return prev;
  12. }
 

C语言面试题分类->链表的更多相关文章

  1. C语言面试题分类->指针

    有关指针的经典面试题 C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的 ...

  2. C语言面试题22. 链表中倒数第k个节点

    要求:输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...

  3. C语言面试题分类->回调

    本文主要讲解如果实现回调,特别是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此 ...

  4. C语言面试题分类->字符串处理

    1.strlen:计算字符串长度(不包含'\0') 实现想法:遍历字符串,直到'\0'结束 #include<stdio.h> #include<stdlib.h> #incl ...

  5. C语言面试题分类->排序算法

    1.选择排序. 每次将最小的数,与剩余数做比较.找到更小的,做交换. 时间复杂度:O(n²) 空间复杂度:O(1) 优缺点:耗时但内存空间使用小. void selectSort(int *p,int ...

  6. C语言面试题分类->位运算

    1.不用临时变量交换两个整数. a = a ^ b; b = a ^ b; a = a ^ b; 2.实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如9的二进制是1001,则输出2. i ...

  7. C语言面试题分类->宏定义

    1.写一个“标准”宏,这个宏输入两个参数并返回较小的一个 答:#define MIN(x, y) ((x)<(y)?(x):(y))//注意x,y要加括号,因为x,y如果有复合运算会出现问题. ...

  8. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  9. 转 C语言面试题大汇总

    转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题:   C语言面试题大汇总,个人觉得还是比较全地!!!  作 者:   free131 (白日?做梦!)   信 誉 值:   100    ...

随机推荐

  1. session前后台交互

    下面是需求需要,不同的人群进来显示不同,但是还必须是这个走到哪都的存在,不能说点击别的页面,下面红框处的数据就没有了,必须是存在的并且登陆的类型不一样,显示的也不一样,开始的时候想到的是直接调用方法, ...

  2. Day04.a(对象类型的转换,多态)

    对象类型的转换 Dog dog = new Dog(); 通常情况下,对象(new Dog())类型和引用(dog)类型是相同的,当引用类型和对象类型不一致时,就需要类型转换. 向上转型:将较具体的类 ...

  3. php 常用的知识点归集(下)

    24.静态属性与静态方法在类中的使用 需求:在玩CS的时候不停有伙伴加入,那么现在想知道共有多少人在玩,这个时候就可能用静态变量的方法来处理 利用原有的全局变量的方法来解决以上的问题 <?php ...

  4. 洛谷 P1414 又是毕业季II

    题目链接 https://www.luogu.org/problemnew/show/P1414 题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离 ...

  5. Selenium自动化测试之元素定位

    步骤: 1.通过前端工具,查看元素的属性 2.通过属性定位 iddriver.findElement(By.id("kw")) namedriver.findElement(By. ...

  6. Snakes 的 Naïve Graph

    题解: 首先分析一下这个问题 发现等价于是求n之内与n互素的数的个数,即欧拉函数 这个可以线性筛 但发现还应该减去$x^2==1$的情况 这个东西不是那么好处理 考虑用中国剩余定理拆 因为$p1^{a ...

  7. 我的Python笔记04

    摘要: 声明:本文整理借鉴金角大王的Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件 ...

  8. java基础之IO流及递归理解

    一.IO流(简单理解是input/output流,数据流内存到磁盘或者从磁盘到内存等) 二.File类(就是操作文件和文件夹的) 1.FIleFile类构造方法 注意:通过构造方法创建的file对象是 ...

  9. centos6.5使用Google auth进行双因子认证

    1.环境 系统:centos6.5 x86_64 [root@uu ~]# uname -a Linux uu 2.6.32-642.el6.x86_64 #1 SMP Wed Apr 13 00:5 ...

  10. CF1097G Vladislav and a Great Legend

    传送门 题目大意 一棵$n$个点的树,一个点集$S$的权值定义为把这个点击连成一个联通块的最少边数,求: $$ans=\sum_{S\in U}f(S)^k$$ 题解 这题跟gdoi那道题差不多 先把 ...