为什么c语言createList2的参用**head,head传不到printfList2里面呢?
前半部分的代码运行结果图:
后半部分代码运行结果图:
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996);
//单链表尾插法建表法
typedef struct LNode
{
int data;
struct LNode* next;
}LNode;
void createList2(LNode** head)//head要改变
{
*head = (LNode *)malloc(sizeof(LNode));//申请头结点=初始化链表
(*head)->next = NULL;
LNode* p = NULL;//用p指针来指向接下来新的节点
LNode* r = *head;//r表示尾指针,始终指向最后一个节点
int n;//n是节点个数
printf("请输入表长\n");
scanf("%d", &n);
for (int i = 0; i < n; i++)//将新的结点链接到尾部
{
p = (LNode*)malloc(sizeof(LNode));//p是指针前面已经说过了
p->next = NULL;
/*printf("请输入数据:\n");*/
scanf("%d", &p->data);//注意&后怎么写的
p->next = r->next;//写成这样是为了和中间插入的写法一致
r->next = p;
r = p;
}
}
void printfList2(LNode **head)
{
LNode* temp;
temp = (*head)->next;
while (temp)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n打印结束\n");
}
int main()
{
LNode **head=NULL;
createList2(head);
printf("尾插法建立的链表为:\n");
printfList2(head);
return 0;
}
//前半部分代码如上
//后半部分代码如下
//换成c++写法就可以了,我不会c++,这是仿照别人代码思路敲的,可能有错
#include<iostream>
#pragma warning(disable:4996);
//单链表尾插法建表法
typedef struct LNode
{
int data;
struct LNode* next;
}LNode;
void createList2(LNode *&head)//head要改变
{
head = (LNode*)malloc(sizeof(LNode));//申请头结点=初始化链表
head->next = NULL;
LNode* p = NULL;//用p指针来指向接下来新的节点
LNode* r = head;//r表示尾指针,始终指向最后一个节点
int n;//n是节点个数
printf("请输入表长\n");
scanf("%d", &n);
for (int i = 0; i < n; i++)//将新的结点链接到尾部
{
p = (LNode*)malloc(sizeof(LNode));//p是指针前面已经说过了
p->next = NULL;
/*printf("请输入数据:\n");*/
scanf("%d", &p->data);//注意&后怎么写的
p->next = r->next;//写成这样是为了和中间插入的写法一致
r->next = p;
r = p;
}
}
void printfList2(LNode* head)
{
LNode* temp;
temp = head->next;
while (temp)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n打印结束\n");
}
int main()
{
LNode*head = NULL;
createList2(head);
printf("尾插法建立的链表为:\n");
printfList2(head);
return 0;
}