之前我们谈到过链表的实现,现在我们就用代码实现链表的第一种情况,头部插入节点。
我们就按照这个图创建先创建头部插入节点
#include<stdio.h>
#include<stdlib.h>
#pragma warning (disable:4996)
struct Node
{
int data;
struct Node* link;
};
struct Node* head;//头节点
void Insert(int x);
void Printf();
int main()
{
head == NULL;
int x,n;
printf("请输入你要插入的节点个数\n");
scanf("%d", &n);
for (size_t i = 0; i < n; i++)
{
printf("输入你要插入的链表数据\n");
scanf("%d", &x);
Insert(x);
Printf();
}
}
void Insert(int x)
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = x;
temp->link = head;
head = temp;
}
void Printf()
{
Node* temp = head;
printf("List is");
while (temp!=NULL)
{
printf(" %d ", temp->data);
temp = temp->link;
}
printf("\n");
}
先创建一个头节点指针置NULL代表链表现在为空,我们通过insert函数给增加的节点分配内存,然后让节点的link指向head(此时head是NULL) 再将head指向此节点,我们大致上就创建出了下图的节点
此时已经有一个节点,head!=NULL 通过
temp->link = head;
head = temp;
我们可以巧妙地将插入节点的link指向下一个节点,同时又将head指向插入的节点。
head指向是指向后面节点的,所以我们新创建的temp可以直接指向head,也就是指向了下一个节点。
代码里面我将head作为全局变量方便使用,如果我们将head作为局部变量,我这里简单介绍一下,前面都有介绍过解引用和引用
1.通过参数值传递insert时,我们不会修改head的值,这是不被允许的,我们可以把head返回出来,然后再传递给print
2.通过二级指针解引用,达到修改head的值,此方法不用返回
head指针
网站标题:CV鼻祖洋芋
原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/135/
本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!