C语言头插法创建单链表时,怎么解决输出后第一个元素为0的问题
时间: 2024-09-23 19:16:29 浏览: 16
在C语言中,使用头插法创建单链表时,如果输出的第一个节点是0,通常是因为你在初始化链表头部添加了一个空节点作为链表的第一个元素。这是常见的做法,因为在插入新节点之前需要有一个起点。
当你创建链表时,可能会这样做:
```c
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
ListNode* createList() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode)); // 初始化链表头部
head->data = 0; // 首先设置数据为0,或者你可以选择不设置
head->next = NULL;
return head;
}
void printList(ListNode *head) {
ListNode *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
}
```
当打印链表时,由于`head`的`data`被设为了0,所以输出的第一个元素就是0。如果你想从数字1开始,可以修改`createList`函数,在添加`head`节点后立即插入实际的数据节点:
```c
ListNode* createList() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->data = 1; // 设置首节点的数据为1
head->next = NULL;
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->data = 0; // 新增一个数据为0的节点
node->next = head;
return node;
}
```
现在,`printList`函数会首先输出0,然后才是1。