如何创建链表?

如何创建链表?引言 最近我们 c 语言课学到了链表 好多同学都在说 哇 链表怎么这么难 根本看不懂呀 不要怕 在这一篇博客中 我会给你详细讲解每一行代码 链表 链表的组成其实很简单 就是由很多结点组成的 一个结点包含数据域和指针域 数据域用来存放数据 指针域负责指向其他结点 起到链接的作用 创建链表 其实创建一个链表也很简单 在我看来 可以分为以下几步 1 创建头结点 命名为 head

链表:

链表的组成其实很简单,就是由很多结点组成的。 一个结点包含数据域和指针域,数据域用来存放数据,指针域负责指向其他结点,起到链接的作用。 

创建链表:

其实创建一个链表也很简单,在我看来,可以分为以下几步: 1.创建头结点。(命名为:head) 2.在创建一个结点用来保存每次插入的结点.(命名为:p) 3.循环创建一般结点。(命名为:s) 4.将创建的结点与已有的结点链接起来! 5.遍历链表,输出数据。 需要注意的是: 1.创建结点时一定不要忘了给它分配内存空间; 2.创建的所有结点都应该是指针型的结构体; 3.链表一定要有“尾”。 

代码如下:

 因为我觉得尾插法相对头插更容易理解,所以先用尾插法向你们演示一番。 
//尾插法建立链表: #include  
     #include  
    //里面包含了malloc函数 struct LinkList//创建结构体 { 
    int data;//数据域,用来保存数据。 struct LinkList* next;//指针域,用来连接其他结点。 }; int main(void) { 
    struct LinkList* head = (struct LinkList*)malloc(sizeof(struct LinkList));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。别忘了在malloc前进行强制类型转换。(struct LinkList*) head->next = NULL;//头结点指针初始化 struct LinkList* p ;//创建p结点 p结点在尾插法中用于记录链表尾结点,将来插入结点的时候只需要向p结点后插入即可。 p = head;//p结点指针赋值为头结点 int n;//保存链表长度,即结点的个数。 printf("请输入链表长度:\n"); scanf("%d", &n); printf("输入数据:\n"); for (int i = 0; i < n; i++)//循环创建结点 { 
    struct LinkList* s = (struct LinkList*)malloc(sizeof(struct LinkList));//创建s结点,并分配内存 scanf("%d", &s->data);//给s结点赋值。 //尾插法建立链表 p->next = s;//因为插完第一个结点后用p保存了上一个结点,所以再插结点时应该插在p节点后面,这就是尾插。 s->next = NULL;//别忘了让插在尾部的s结点的指针指向NULL。 p = s;//p结点保存刚才的s结点;以保证p始终为链表的最后一个节点 }//至此,链表的创建已经完成了。 p = head;//让p指针从"头"开始。 while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。 { 
    printf("%-5d", p->next->data); p = p->next;//p结点后移 } printf("\n"); return 0; }//至此完成了链表的遍历输出。 
好!接下来就是头插法建立链表了,同样,头插法与尾插法一般无二,所以废话不多说,直接上代码! 
//头插法建立链表: #include  
     #include  
    //里面包含了malloc函数 struct LinkList//创建结构体 { 
    int data;//数据域,用来保存数据。 struct LinkList *next;//指针域,用来连接其他结点。 }; int main(void) { 
    struct LinkList *head = (struct LinkList *) malloc( sizeof(struct LinkList));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。别忘了在malloc前进行强制类型转换。(struct LinkList*) head->next = NULL;//头结点指针初始化 struct LinkList *p; int n;//保存链表长度,即结点的个数。 printf("请输入链表长度:\n"); scanf("%d", &n); printf("输入数据:\n"); for (int i = 0; i < n; i++)//循环创建结点 { 
    struct LinkList *s = (struct LinkList *) malloc(sizeof(struct LinkList));//创建s结点,并分配内存 scanf("%d", &s->data);//给s结点赋值。 //头插法建立链表 s->next = head->next; //将链表除链表头的所有节点连接在新建节点之后 head->next = s;//在让头结点指向新节点 注意:和上一语句顺序不能颠倒 }//至此,链表的创建已经完成了。 p = head;//让p指针从"头"开始。 while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。 { 
    printf("%-5d", p->next->data); p = p->next;//p结点后移 } printf("\n"); return 0; }//至此完成了链表的遍历输出。 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217465.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:30
下一篇 2026年3月18日 上午9:30


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号