本题要求实现一个函数,建立一个链表,返回头指针(即头节点地址) head是链表的头指针,链表上节点的定义如下: struct node {char ch; struct node * next;} 链表上节点的数据成员ch按顺序赋值0,1,2,3......至n-1
时间: 2023-05-31 14:21:07 浏览: 294
### 回答1:
以下是实现建立链表并返回头指针的函数的代码:
```c
struct node * create_list(int n)
{
struct node * head = NULL;
struct node * p = NULL;
int i;
for (i = ; i < n; i++) {
struct node * new_node = (struct node *)malloc(sizeof(struct node));
new_node->ch = i;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
p = head;
} else {
p->next = new_node;
p = p->next;
}
}
return head;
}
```
这个函数接受一个整数n作为参数,表示链表中节点的个数。它会创建一个包含n个节点的链表,并返回链表的头指针。
链表的节点定义为一个结构体,包含一个字符类型的数据成员ch和一个指向下一个节点的指针类型的数据成员next。
在函数中,我们使用一个循环来创建n个节点。对于每个节点,我们先动态分配一个新的节点结构体,并将其ch成员赋值为当前循环变量i的值。然后,我们将新节点添加到链表中。如果链表为空,我们将新节点设置为头节点;否则,我们将新节点添加到链表的末尾。
最后,我们返回链表的头指针。
### 回答2:
要建立一个链表,需要首先定义节点结构体。
题目中给出的节点结构体有两个成员,一个是存储字符类型的ch,另一个是指向下一个节点的指针类型的next。可以按照以下方式定义节点结构体:
```
struct node {
char ch;
struct node *next;
};
```
接着,根据要求,从0到n-1按顺序赋值给每个节点的ch成员。可以使用循环来完成这个过程:
```
struct node *head, *p, *q; //定义头指针和两个临时指针
head = (struct node *)malloc(sizeof(struct node)); //分配头节点空间
head->ch = 0; //头节点值为0
p = head; //p指向已经建立的链表末尾
for(int i=1; i<n; i++){
q = (struct node *)malloc(sizeof(struct node)); // 分配新节点空间
q->ch = i; // 新节点的值为i
p->next = q; //将新节点接在链表末尾
p = q; //更新p指针
}
p->next = NULL; //最后一个节点的next指针置为NULL
return head; // 返回头节点指针
```
在代码中,首先定义了三个指针,head、p和q。head是头节点指针,p是一直指向链表末尾的指针,q是用来指向新申请的空间的临时指针。利用循坏,从1到n-1,申请新节点空间,将新节点的值i赋给ch成员,将新节点接入链表。最后将最后一个节点的next指针置为NULL,最后返回头节点指针。
实现这个函数后,就可以使用它来建立一个链表,并得到链表头指针,即头节点地址。
### 回答3:
题目要求建立一个链表并返回头指针,因此首先需要定义一个结构体,该结构体包含一个char类型的数据成员ch和一个指向下一个节点的指针next。在建立链表时,需要初始化每一个节点的数据成员ch,按顺序赋值0,1,2,3......至n-1。
链表的建立可以通过循环操作实现,具体步骤如下:
1. 定义一个指针变量head,指向链表的头节点;
2. 定义一个计数器变量i,用于记录已经建立的节点数;
3. 进入循环,当i小于n时,重复以下步骤:
(1)创建一个指针变量p,用于指向新建立的节点;
(2)为p分配内存空间,使用malloc函数;
(3)将p的数据成员ch赋值为i;
(4)将p的指针成员next赋值为head,将p设为新的头节点;
(5)将head指向p,将p设为下一个节点;
(6)将计数器变量i加1;
4. 返回头指针head。
函数的实现将代码化为如下:
```
struct node* createList(int n){
struct node *head, *p;
int i;
head = NULL;
for(i = 0; i < n; i++){
p = (struct node*)malloc(sizeof(struct node));
if(p == NULL){
printf("Error: Memory allocation failed!");
exit(0);
}
p->ch = i;
p->next = head;
head = p;
}
return head;
}
```
该函数接受一个整数参数n,用于指定链表节点的数量;返回一个指向链表头节点的指针变量head。当内存空间分配失败时,函数会输出错误信息并且程序终止。在正常情况下,函数会创建一个包含n个节点的链表,并返回头指针。函数所返回的链表首先包含的是n-1,其次是n-2,以此类推,头节点为0。
阅读全文