单链表前插法的C语言代码和具体解释
时间: 2024-05-03 16:21:01 浏览: 54
好的,关于单链表前插法的C语言代码和具体解释,我可以向您提供以下代码和解释:
代码:
```c
#include <stdio.h>
#include <stdlib.h>
//定义单链表节点结构体
typedef struct node
{
int data;
struct node* next;
}Node;
//定义单链表的头节点
Node* head;
//创建单链表
void createList(int n)
{
int i;
Node *newNode, *temp;
head = (Node*)malloc(sizeof(Node));//创建头节点
if(head == NULL) //判断是否创建成功
{
printf("Memory allocation failed.\n");
exit(0);
}
head->data = 1; //给头节点赋值
head->next = NULL; //头节点指向null
temp = head;
for (i = 2; i <= n; i++)
{
newNode = (Node*)malloc(sizeof(Node)); //创建新的节点
if(newNode == NULL)//判断是否创建成功
{
printf("Memory allocation failed.\n");
exit(0);
}
newNode->data = i; //给新的节点赋值
newNode->next = NULL;//新的节点指向null
temp->next = newNode; //前一个节点指向当前节点
temp = newNode;//当前节点变成前一个节点
}
}
//遍历单链表
void traverseList()
{
Node* temp;
temp = head;
while(temp != NULL)//整个单链表遍历完
{
printf("%d ", temp->data);//输出当前节点数据
temp = temp->next;//当前节点变成下一个节点
}
}
//在单链表头部插入数据
void InsertAtBeginning(int data)
{
Node* newNode = (Node*)malloc(sizeof(Node)); //创建新的节点
if(newNode == NULL)//判断是否创建成功
{
printf("Memory allocation failed.\n");
exit(0);
}
newNode->data = data;//给新的节点赋值
newNode->next = head;//新的节点指向头节点
head = newNode;//头节点变成新的节点
}
int main()
{
int n = 5; //定义单链表节点数量
createList(n); //创建单链表
printf("The original linked list is:\n");
traverseList(); //遍历单链表
printf("\n");
//在头部插入节点并输出新的单链表
InsertAtBeginning(0);
printf("The updated linked list is:\n");
traverseList();
return 0;
}
```
解释:
- `typedef struct node`:定义了一个单链表节点结构体,结构体名为`node`。
- `Node* head`:定义了一个头节点指针,类型是`Node*`,表示头节点中存放的是`Node`类型的数据。
- `createList(int n)`:创建单链表的函数,`n`表示用户想要创建的单链表节点数量,函数通过循环,先创建头节点,然后根据用户输入的节点数,创建相应数量的节点,并将当前节点的指针指向下一个节点。
- `traverseList()`:遍历单链表的函数,通过循环,从头节点开始,依次输出每个节点的数据,直到遍历到最后一个节点。
- `void InsertAtBeginning(int data)`:在单链表头部插入数据的函数,接受一个整型的数据作为参数,创建一个新的节点,将新节点的指针指向头节点,再将头节点的指针指向新建的节点,单链表头部的操作就完成了。
阅读全文