gpt4 book ai didi

c - 双向链表在中间插入

转载 作者:行者123 更新时间:2023-11-30 15:37:48 25 4
gpt4 key购买 nike

任何人都可以确定我的代码中发生了什么导致段错误吗?请修改/更正错误的部分。

void InsertAtMid (Node *head){

int num,count=0,i;
Node *ptr=head;
Node *newnode=NULL;
Node *newnode2=head;

printf("Enter node to be inserted: ");
scanf("%d", &num);

if (head==NULL){
newnode = head;
newnode=(Node *)malloc(sizeof(Node));
newnode->x=num;
newnode->next=NULL;
newnode->prev=NULL;
} else {
ptr=head->next;
while(ptr->x!=(count/2)){
ptr=ptr->next;
}
newnode->next=ptr->next;
newnode->prev=ptr;
ptr->next->prev=newnode;
ptr->next=newnode;
}
}

最佳答案

因此,根据我对您的代码的理解 - 以下内容应该[大部分]有效:

void InsertAtMid (Node **head){
int num = 0;
int count = 0
int advance = 0;
Node *ptr = *head;
Node *newnode = NULL;

printf("Enter node to be inserted: ");
scanf("%d", &num);

if (*head == NULL) {
*head = (Node *)malloc(sizeof(Node));
ptr = *head;
ptr->x = num;
ptr->next = NULL;
ptr->prev = NULL;
} else {
// *** Count the number of items
ptr = *head;
while (ptr != NULL) {
ptr = ptr->next;
count++;
}

// *** Move to the middle of the list
ptr = *head;
while (advance < (count/2)){
ptr = ptr->next;
advance++;
}

// *** Insert the new value
newnode = (Node *)malloc(sizeof(Node));
newnode->x = num;
newnode->next = ptr->next;
newnode->prev = ptr;
ptr->next->prev = newnode;
ptr->next = newnode;
}
}

以下是我修复的问题:

  • 您在某个时刻分配给 head,但由于“head”不是作为引用传入的,因此在第一次调用该函数之后该值将不会保留。不用说,您需要一个指向节点类型指针的指针。
  • 您从未计算过列表中的项目数。通常,“头”指针会存储此信息,并且在添加节点时您会递增,但由于您没有,确定它的唯一方法是遍历列表直到找到计数。
  • 除非您正在初始化头指针,否则您从未为要插入的新节点分配空间。这也是一个问题。

希望对一些人有帮助。祝你好运!

关于c - 双向链表在中间插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22070101/

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