gpt4 book ai didi

c - 在单向链表的开头添加一个节点 (C)

转载 作者:行者123 更新时间:2023-12-01 13:10:53 25 4
gpt4 key购买 nike

代码没有错误,但我似乎不知道为什么新节点没有被插入到列表的开头。它可能与第一个函数 (insertNode) 中的 else 语句有关,但我不确定,这是怎么回事?

#include <stdio.h>
#include <stdlib.h>

struct node {
int data;
struct node *link;
};

void insertNode(struct node *head, int x) {
//Create node to be added and add the input integer to it
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
temp->data = x;

//Check if there are any existing nodes in the list, if not, the let the head be equal to the new temp pointer
if (head == NULL) {
head = temp;
} else {
//If not, then we need to add the node to the beginning
temp->link = head;
head = temp;
printf("Node was added successfully!\n");
}
}

int findsize(struct node *head) {
//Finds the size of the list

struct node *temp = head;
int count = 0;
while (temp != NULL) {
count++;
temp = temp->link;
}
return count;
}

void printData(struct node *head) {
//Prints the elements of the list
struct node *temp = head;
while (temp != NULL) {
printf("Element: %d\n", temp->data);
temp = temp->link;
}
}

void main() {
//Created a node and allocated memory
struct node *head;
head = (struct node *)malloc(sizeof(struct node));
//Added data to the node and created another one linked to it
head->data = 15;
head->link = (struct node *)malloc(sizeof(struct node));
head->link->data = 30;
head->link->link = NULL;
//Used the above function to add a new node at the beginning of the list
insertNode(head, 5);
//Print the size of the list
printf("The size of the list you gave is: %d\n", findsize(head));
//Print the elements of the list
printData(head);
}

最佳答案

当你在列表的开头插入一个节点时,你实际上改变了列表的开头,所以这个新的初始节点必须返回给调用者。 insertNode() 的原型(prototype)必须更改为返回列表头或获取指向列表头的指针。

这是第一种方法的修改版本:

#include <stdio.h>
#include <stdlib.h>

struct node {
int data;
struct node *link;
};

struct node *insertNode(struct node *head, int x) {
//Create node to be added and add the input integer to it
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
if (temp != NULL) {
temp->data = x;
temp->link = head;
}
return temp;
}

int findsize(struct node *head) {
//Find the size of the list
struct node *temp = head;
int count = 0;
while (temp != NULL) {
count++;
temp = temp->link;
}
return count;
}

void printData(struct node *head) {
//Prints the elements of the list
struct node *temp = head;
while (temp != NULL) {
printf("Element: %d\n", temp->data);
temp = temp->link;
}
}

void main() {
//Created a node and allocated memory
struct node *head = NULL;
//Insert 3 nodes with values 30, 15 and 5
head = insertNode(head, 30);
head = insertNode(head, 15);
head = insertNode(head, 5);
//Print the size of the list
printf("The size of the list you gave is: %d\n", findsize(head));
//Print the elements of the list
printData(head);
//Should free the nodes
return 0;
}

关于c - 在单向链表的开头添加一个节点 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com