用c语言编写程序,将若干整数从键盘输入,以单链表形式存储起来,然后计算单链表中结点的个数(其中指针P指向该链表的第一个结点)
时间: 2024-10-17 14:04:28 浏览: 43
在C语言中,我们可以使用结构体定义链表节点,并创建一个函数来完成这个任务。首先,我们需要定义一个结构体`ListNode`,包含一个整数值`val`和一个指向下一个节点的指针`next`:
```c
typedef struct ListNode {
int val; // 结点值
struct ListNode* next; // 指向下一个结点的指针
} ListNode;
```
接下来,我们编写函数`inputList`用于从用户输入获取数据并构建链表:
```c
// 函数原型
ListNode* inputList() {
ListNode* head = NULL; // 初始化头结点指针
int num;
printf("请输入整数(输入0结束):");
while (scanf("%d", &num) == 1 && num != 0) { // 只要用户输入非零整数
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 分配新节点内存
newNode->val = num;
newNode->next = head; // 将新节点设为当前链表的头
head = newNode; // 更新头结点
}
return head;
}
```
最后,我们写一个辅助函数`countNodes`来计算链表长度:
```c
int countNodes(ListNode* p) {
int count = 0;
while (p != NULL) {
count++;
p = p->next; // 移动到下一个节点
}
return count;
}
int main() {
ListNode* list = inputList();
if (list != NULL) {
int nodeCount = countNodes(list);
printf("链表中的节点总数是:%d\n", nodeCount);
freeList(list); // 清理内存
} else {
printf("链表为空。\n");
}
return 0;
}
```
在这个程序中,`freeList`是一个用于释放链表内存的清理函数,我没有提供其代码,因为这通常涉及到遍历链表并逐个释放节点。你可以自己添加这部分代码。
阅读全文