链表的创建

来源:互联网 发布:Linux 线程 sched_fifo 编辑:程序博客网 时间:2024/05/17 04:59

链表的创建


先定义一个结构struct code

struct code{    int value;    struct code * next;};

里面包含了一个变量value和一个struct code类型的指针,这个指针用来指向下一个节点,如图:

这里写图片描述

要创建链表,就要先定义一个struct code类型的指针指向第一个节点

struct code * first;

需要注意的是,此时first还没有初始化,为了安全,我们在定义时同时对first初始化

//需要包含头文件<stdlib.h>struct code * first = NULL

这样first就算定义好了,但这个时候first的值为空,也就是说first还没有指向任何对象,现在我们让first指向第一个节点

//创建一个内存块,大小与一个struct code类型变量的大小相同,并让first指向该内存块first = (struct code *)malloc(sizeof(struct code));

因为malloc函数返回值类型为 void* 而first是 struct code * 类型,但两者本质上都是指针类型(都只表示地址),所以进行强制转换

此时first已经指向了一个节点,按照上面的方法我们再定义一个新节点 new_code ,如图:

这里写图片描述

接下来我们让 *first.next 指向 new_code

first->next = new_code;

如图:这里写图片描述

然后再让 new_code 指向一个新的节点

new_code = (struct code *)malloc(sizeof(struct code));

这里写图片描述

这时我们要把第三个节点的地址给第二个节点中的 next

first->next->next = new_code;

显然这样的方法很麻烦,所以我们定义一个指针指向 new_code 前一个节点

struct code * prenew_code = NULL; 

在创建新节点的时候,把旧节点的地址给 prenew_code

prenew_code = new_code;new_code = (struct code *)malloc(sizeof(struct code));

这里写图片描述

然后再让第二个节点的 next 指向第三个节点

prenew_code->next = new_code;

这里写图片描述

然后再让 prenew_code 指向 new_code,new_code 指向新节点

prenew_code = new_code;new_code = (struct code *)malloc(sizeof(struct code));prenew_code->next = new_code;

这里写图片描述

这样一直执行下去就可以得到一个链表了,完整代码如下:

//n为要创建的链表的长度struct code * createList(int n){    //创建第一个节点    struct code * new_code = (struct code *)malloc(sizeof(struct code));    struct code * prenew_code = new_code;    struct code * first = new_code;    for(int i = 1;i < n;i++){        //创建新节点        new_code = (struct code *)malloc(sizeof(struct code));        //让上一个节点指向新节点        prenew_code->next = new_code;        prenew_code = new_code;    }    //返回链表第一个节点的地址    return first;}
原创粉丝点击