C 双链表指针多项式问题

C 双链表指针多项式问题,c,pointers,doubly-linked-list,polynomials,C,Pointers,Doubly Linked List,Polynomials,我用双链表做了一些多项式代码。例如,如果 你写1和2,然后1是度,2是系数。1x^2插入 到双链接列表。问题是,当我检查代码时,节点 头->度在变化。如果我写1x^2,那么head->degree接下来是1, 我写了2x^1,然后head->degree应该保持1,但是head->degree 换成2,我认为头部指针有问题 #包括 #包括 //结构 结构节点{ 智力度; int系数; 结构节点*下一步; 结构节点*prev; }; //全局变量 int de;//度 int co;//系数 in

我用双链表做了一些多项式代码。例如,如果 你写1和2,然后1是度,2是系数。1x^2插入 到双链接列表。问题是,当我检查代码时,节点 头->度在变化。如果我写1x^2,那么head->degree接下来是1, 我写了2x^1,然后head->degree应该保持1,但是head->degree 换成2,我认为头部指针有问题

#包括
#包括
//结构
结构节点{
智力度;
int系数;
结构节点*下一步;
结构节点*prev;
};
//全局变量
int de;//度
int co;//系数
int标志;
节点**头=(节点**)malloc(节点大小));//
节点**head1=(节点**)malloc(节点大小));//
节点**头2=(节点**)malloc(节点大小));//
节点**头3=(节点**)malloc(节点大小));//
Node*newNode=(Node*)malloc(sizeof(Node))//
//作用
节点*inputpoly(void);
无效打印节点(节点*inp);
节点*乘法(节点*a,节点*b);
//主要
int main(){
//头空
(*head1)=空;
(*head2)=空;
(*head3)=空;
而(1){
printf(“输入(度)(系数):”;
scanf_s(“%d%d”、&de和co);
如果(de*co<0){continue;}
如果(de<0和co<0){
printf(“完成!\n”);
打破
}
*头=输入多边形();
}
打印节点(*头);
//乘(*head1,*head2);
免费(头1);
免费(头2);
免费(头3);
免费(新节点);
自由(头);
}
节点*inputpoly(无效){
//创建节点
newNode->degree=de;
新节点->系数=co;
newNode->next=NULL;
newNode->prev=NULL;
//案例1
如果(标志==0){
//名单
如果((*head1)==NULL){
*head1=新节点;
}
//列表x
否则{
节点*horse=(*head1);
//前额
//有一些问题
printf(“%d\n”,1);
printf(“--%d\n”,newNode->degree);
printf(“--%d\n”,马->度);
如果(马->度>新节点->度){
newNode->next=马;
horse->prev=newNode;
*head1=新节点;
}
//头部向上
否则{
int num=0;
while(horse->next!=NULL){
马=马->下一步;
如果(马->度>新节点->度){
horse->prev->next=newNode;
newNode->next=马;
新建节点->上一个=马->上一个;
horse->prev=newNode;
num=1;
打破
}
}
//尾巴后面
如果(num==0){
horse->next=newNode;
newNode->prev=马;
}
}
}   
返回*标题1;
}
}
无效打印节点(节点*inp){
节点*horse=inp;
if(horse==NULL)
{ 
返回;
}
while(horse!=NULL){
if(horse->prev==NULL){
如果(马->度==1){
printf(“%d”,马->系数);
}
否则{
printf(“%d x^%d”,马->系数,马->度);
}
}
否则{
如果(马->度==1){
printf(“+%d”,马->系数);
}
否则{
printf(“+%d x^%d”,马->系数,马->度);
}
}
}
printf(“\n”);
}
“我认为有一些头指针问题,如果我解决了它,我可以解决这个问题。所以我想尽可能维护这段代码。我想要一些 “我的头指针的建议或解决方案”

示例中发布的代码未编译:

在修复头指针问题之前,必须先编译代码。此错误列表详细说明了两件事:

首先,函数不能在函数外部调用,例如:

Node** head = (Node**)malloc(sizeof(Node)); // 
Node** head1 = (Node**)malloc(sizeof(Node)); // 
Node** head2 = (Node**)malloc(sizeof(Node)); // 
Node** head3 = (Node**)malloc(sizeof(Node)); // 
Node* newNode = (Node*)malloc(sizeof(Node)); //
应该从
main(void){…}
或其他函数中调用

其次,每次出现的
节点
都应该在前面加上
struct
。例如:

struct Node** head = malloc(sizeof(struct Node *));
(还删除了强制转换,并修改了要为其创建内存的对象(即指针)的大小)

这里是一个双链表的示例,它可以演示一个简单工作程序的结构,而不是修复这些问题和其他问题。您可以根据需要调整以下内容:

 struct Node {
    int deg;
    int coef;
    struct Node* next; // Pointer to next node in DLL
    struct Node* prev; // Pointer to previous node in DLL
};

void inputpoly(struct Node** head_ref, int deg, int coef)
{
    //allocate node
    struct Node *new_node = malloc(sizeof(*new_node));
 
    //assign data
    new_node->deg = deg;
    new_node->coef = coef;  
 
    //set next as new head and prev to null
    new_node->next = (*head_ref);
    new_node->prev = NULL;
 
    //change prev of head  to new */
    if ((*head_ref) != NULL)
        (*head_ref)->prev = new_node;
 
    //point head to the new node */
    (*head_ref) = new_node;
}

void printList(struct Node* node)
{
    struct Node* last;
    printf("\nread forward\n");
    while (node != NULL) {
        printf(" %d,%d ", node->deg,node->coef);
        last = node;
        node = node->next;
    }
 
    printf("\nread reverse\n");
    while (last != NULL) {
        printf(" %d,%d ", last->deg,last->coef);
        last = last->prev;
    }   
}

int main(void)
{
    //start with empty list
    struct Node* head = NULL;
    //create and populate new nodes
    inputpoly(&head, 7, 2);
    inputpoly(&head, 1, 4);
    inputpoly(&head, 4, 6);
    //ouput list

    printList(head);
    getchar();
    return 0;
}

注意,这段代码是作为创建双链表的基本演示提供的,并说明了如何遍历两个方向。因为它不会释放分配的内存,所以不建议在不解决该遗漏的情况下将其用于任何生产目的。

我不建议“修复”该代码。我宁愿阅读一些关于链表实现的文档(也许是一些示例?),因为您在这里使用它们的方式不会引导您走多远,我担心我应该使用双链表,我认为存在一些头指针问题,如果我修复了它,我可以解决这个问题。所以我希望尽可能地维护这段代码。我想给我的头指针一些建议或解决方案:)这个:
Node**head=(Node**)malloc(sizeof(Node))将不会编译,因为您正在尝试在任何函数之外进行此调用。所有其他类似的语句也是如此。和.+malloc(sizeof(Node))分配节点**不正确,它应该是sizeof(Node*)@YongHoon-1是度,2是系数。1x^2-否。在1x^2中,1是系数,2是度。