用C语言按下面的要求编写代码:判断链表的头节点head是否为空,如果不为空,则说明链表已经存在,无需创建新的链表,可以直接返回空指针或者提示信息。 如果头节点head为空,则需要动态创建一个新的节点p,并将其添加到链表中,使之成为第一个节点。 创建一个指针temp,并将其指向第一个节点,即指向当前链表的尾部。 从第二个节点开始,先动态创建一个新节点p,然后将p插入到temp指向节点的后面。 将temp指向p,以此类推,直到最后一个节点。 最后将temp指向节点的next域置为NULL,表示链表创建结束。
时间: 2024-02-24 15:56:08 浏览: 37
好的,以下是按照您要求编写的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 创建链表
struct ListNode* createLinkedList() {
// 头节点指针
struct ListNode *head = NULL;
// 判断头节点是否为空
if (head != NULL) {
printf("链表已经存在,无需创建新的链表!\n");
return NULL;
}
// 动态创建一个新的节点p
struct ListNode *p = (struct ListNode*)malloc(sizeof(struct ListNode));
if (p == NULL) {
printf("动态内存分配失败!\n");
return NULL;
}
// 将p添加到链表中,使之成为第一个节点
printf("请输入头节点的值:");
scanf("%d", &p->val);
p->next = NULL;
head = p;
// 创建一个指针temp,并将其指向第一个节点
struct ListNode *temp = head;
// 从第二个节点开始,依次创建新节点,并插入到链表中
int n;
printf("请输入链表中节点的个数:");
scanf("%d", &n);
for (int i = 2; i <= n; i++) {
// 动态创建一个新节点p
struct ListNode *p = (struct ListNode*)malloc(sizeof(struct ListNode));
if (p == NULL) {
printf("动态内存分配失败!\n");
return NULL;
}
// 将p插入到temp指向节点的后面
printf("请输入第%d个节点的值:", i);
scanf("%d", &p->val);
p->next = NULL;
temp->next = p;
// 将temp指向p
temp = p;
}
// 将链表的尾部节点的next域置为NULL,表示链表创建结束
temp->next = NULL;
return head;
}
int main() {
struct ListNode *head = createLinkedList();
if (head != NULL) {
printf("链表创建成功!\n");
}
return 0;
}
```
这个代码段实现了按照您要求创建链表的功能,其中`createLinkedList()`函数用于创建链表,`main()`函数用于测试链表是否创建成功,您可以根据自己的需求进行修改和扩展。
阅读全文