sususususu 发表于 2023-12-5 17:05:01

非空双链表L插入一个值为x

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

struct Node{
        int data;
        struct Node* prev;
        struct Node* next;
};

void insertBefore(struct Node* head,int i,int x)
{
        if(i<=0)
        {
                printf("插入位置无效\n");
                return;
        }
       
        struct Node* current=head;
        int currentPosition=0;
       
        while(current!=NULL&&currentPosition<i)
        {
                current=current->next;
                currentPosition++;
        }
       
        if(currentPosition!=i||current==NULL)
        {
                printf("插入位置无效\n");
                return;
        }
       
        struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
        newNode->data=x;
        newNode->prev=current->prev;
        newNode->next=current;
        current->prev->next=newNode;
        current->prev=newNode;
       
}

int main()
{
        struct Node* head=(struct Node*)malloc(sizeof(struct Node));
        head->prev=NULL;
        head->next=NULL;
       
        int values[]={10,20,30};
        for(int i=3;i>=0;i--)
        {
                struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
                newNode->data=values;
                newNode->prev=head;
                newNode->next=head->next;
                if(head->next!=NULL)
                {
                        head->next->prev=newNode;
                }
                head->next=newNode;
        }
        insertBefore(head,2,15);
       
        struct Node* current=head->next;
        while(current!=NULL)
        {
                printf("%3d",current->data);
                current=current->next;
        }
       
        current=head->next;
        while(current!=NULL)
        {
                struct Node* temp=current;
                current=current->next;
                free(temp);
        }
        free(head);
       
        return 0;
}




为什么输出结果是10 15 20 30 0,0是从哪来的?

FishC_GPT 发表于 2023-12-5 17:05:18

问题出在循环中的`int values={10,20,30};`这行代码上。它应该被修改为`int values[] = {10, 20, 30};`,以便正确定义一个整数数组。

当您使用`values`数组来初始化新节点的数据时,您需要使用索引`i`来访问数组元素。也就是说, `newNode->data = values;`。

此外,在循环终止条件中的变量`i`应该大于等于0,即改为`for(int i=2;i>=0;i--)`。

当所有这些修改完成后,您应该得到正确的输出结果为10 15 20 30。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 非空双链表L插入一个值为x