#include<stdio.h>
#pragma warning (disable:4996)
struct Node* head = NULL; //头节点全局变量
struct Node* inser_node = NULL;
struct Node
{
int data; //单向链表的数据
struct Node* next;
};
void insertlist_random(int data_in_tem);//声明函数
void create_list(int data_item); //声明函数
void create_list(int data_item)
{
struct Node* inser_node = (struct Node*)malloc(sizeof(struct Node*));
if (inser_node == NULL)
{
printf("内存分配失败");
exit(0);
}
else
{
inser_node->data = data_item;
inser_node->next = head;
head = inser_node; //头结点head
printf("节点已经插入了。\n");
}
return;
}
void insertlist_random(int data_in_tem)
{
struct Node* insert_Node = (struct Node*)malloc(sizeof(struct Node*));
int insertpos;//局部变量
struct Node* temp_node; //临时的节点指向头节点head
if (insert_Node == NULL)
{
printf("分配内存失败!");
exit(0);//正常退出程序
}
else
{
printf("请输入插入的位置:\n");//节点从0(零)开始插入的
scanf("%d", &insertpos);
insert_Node->data = data_in_tem;
temp_node = head; //这里是第50行
//这里是temp_node结构体指针指向head全局变量结构体指针,但是temp_node是取head的值的,怎么下断点后
//观察到67步后的temp_node->next = insert_Node;中的temp_node->next的数据和指针内存地址 怎么赋值到head结构体这里了?
//这是怎么回事?
for (int i = 0; i < insertpos; i++)
{
temp_node = temp_node->next; //第57行
//这里for循环一次temp_node->next内容指针就少一个是怎么做到的?
if (temp_node == NULL)
{
printf("前面没有节点,无法插入新的节点:\n");
exit(0);
}
}
insert_Node->next = temp_node->next;
temp_node->next = insert_Node; //`````````````这里是第67行
//下断点后第2次以后循环观察走过这里后第50行的 temp_node = head;也就是头节点怎
//么将temp_node->next的值传递给head头节点了?传递过程是什么呢?我想知道是怎么传递到head头节点的?
//通过temp_node->next指针内存地址传递的?怎么传递的?实在不明白原理了
printf("新节点已经插入成功");
}
return;
}
int main()
{
int choice;
int inputdata;
do
{
printf("请输入插入节点的数据:\n");
scanf("%d", &inputdata); //节点从零0开始
if (head == NULL)
{
create_list(inputdata);//插入到表头让表头head指针有值并指向第一节点
}
else
{
insertlist_random(inputdata);//头节点不为空走这里
}
printf("如果想退出就输入一个非0后回车:\n");
scanf("%d", &choice);
} while (choice == 0);
return 0;
}
我想要知道第50行,第57行,第67行的问题麻烦了。下边是无在控制台填写的内容:
请输入插入节点的数据:
10
节点已经插入了。
如果想退出就输入一个非0后回车:
0
请输入插入节点的数据:
11
请输入插入的位置:
0
新节点已经插入成功如果想退出就输入一个非0后回车:
0
请输入插入节点的数据:
12
请输入插入的位置:
1
新节点已经插入成功如果想退出就输入一个非0后回车:
0
请输入插入节点的数据:
13
请输入插入的位置:
2
新节点已经插入成功如果想退出就输入一个非0后回车:
0
请输入插入节点的数据:
14
请输入插入的位置:
3
新节点已经插入成功如果想退出就输入一个非0后回车:
0