建立带头结点链表,-1表示结束,输入:1 2 3 87 3 -1,输出:1 2 3 87 3。用C语言完成代码
时间: 2024-09-19 09:04:19 浏览: 34
链表-使用C语言实现带头结点的单链表.zip
在C语言中,我们可以创建一个单向链表结构,并使用头指针来表示链表的开始。每个节点包含一个整数值和指向下一个节点的指针。当你需要插入数据并保持`-1`作为结束标志时,可以按照以下步骤编写代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int value;
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建新节点函数
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode != NULL) {
newNode->value = val;
newNode->next = NULL;
}
return newNode;
}
// 插入节点到链表
void insertToList(ListNode** head, int val) {
if (*head == NULL) { // 如果链表为空,直接创建第一个节点
*head = createNode(val);
} else {
ListNode* current = *head;
while (current->next != NULL && current->next->value != -1) { // 遍历到 `-1` 结束位置前
current = current->next;
}
if (current->next != NULL) { // 如果不是第一个元素并且找到了 `-1`
current->next = createNode(val); // 插入新节点
} else {
free(*head); // 如果已经到达了结尾,释放旧的头节点,设置新的头节点
*head = createNode(val);
}
}
}
// 打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d ", temp->value);
temp = temp->next;
}
printf("-1\n");
}
int main() {
ListNode* head = NULL;
int arr[] = {1, 2, 3, 87, 3, -1};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
insertToList(&head, arr[i]);
}
printList(head);
return 0;
}
```
这个程序首先创建了一个空链表,然后遍历给定数组`arr`,将每个非`-1`值插入链表直到遇到`-1`为止。最后,打印整个链表。
阅读全文