【发布时间】:2018-09-19 12:03:16
【问题描述】:
我想在基于数字的排序链表中添加一个节点。这是结构:
struct node {
int number;
struct node *next;
}
我能够正确添加到排序链表,但不能让它改变头部。
很遗憾,我无法更改函数声明的格式,所以这是我的函数:
int create(struct node *head, int number) {
struct node *newNode = malloc(sizeof(struct node));
newNode->number = number;
struct node *current = head;
if (current->number == -1) {
newNode->next = NULL;
*head= *newNode;
return 1;
}
//Checking if head's number is bigger than init
if (current->number > number) {
newNode->next = current;
*head = *newNode;
} else {
while(current->next != NULL && (current->number <= number)) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
return 1;
}
对函数的调用是(注意我也无法更改):
struct node *list;
list = initializeList();
int num;
num = create(list, 5);
num = create(list, 1);
第二次调用后,列表应该是 1->5。但它变成了 1->1->1->1->.....
编辑:初始化列表的代码:
struct node * initializeList() {
struct node *head;
head = malloc(sizeof(struct node));
head->next = NULL;
head->number = -1;
return head;
}
【问题讨论】:
-
您是否也可以发布
initializeList()的代码,似乎相关 -
我不明白你为什么需要这条线
*head = *newNode; -
@kiranBiradar
*head = *newNode行在那里,所以我可以将头部分配给新节点。 -
@rtpax 添加了
initializeList()代码 -
我的行为与您描述的不同。我得到的结果列表是 0->5->1。请注意,0 来自
initializeList中的未初始化值,因此可能会有所不同。
标签: c singly-linked-list