C 列出m个节点,其中m被输入

C 列出m个节点,其中m被输入,c,c99,C,C99,您好,这是我为创建他所需要的任意多个节点(m变量)而编写的代码,但是我注意到使用这个方法我又创建了一个节点。根据用户的说法,创建尽可能多的节点的最佳方法是什么 #include <stdio.h> #include <stdlib.h> typedef struct Node{ int val; int rip; struct Node *next; } node; node *modify(node *head); void print(n

您好,这是我为创建他所需要的任意多个节点(m变量)而编写的代码,但是我注意到使用这个方法我又创建了一个节点。根据用户的说法,创建尽可能多的节点的最佳方法是什么

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

typedef struct Node{
    int val;
    int rip;
    struct Node *next;
} node;

node *modify(node *head);

void print(node *head2);

int main(){

    int m, i;

    printf("How many nodes: \n");
    scanf("%d", &m);

    node *head = NULL;
    head = (node *)malloc(sizeof(node));
    node *temp = head;
    node *head2 = NULL;

    printf("Write the value in HEAD position : \n");
    scanf("%d", &temp->val);
    temp->rip=0;
    temp->next = NULL;

    for(i=0; i < m-1; i++)
    {
        temp->next = (node *)malloc(sizeof(node));
        printf("Write the value in position %d: \n", i);
        temp = temp->next;
        scanf("%d", &temp->val);
        temp->rip=0;
        temp->next = NULL;  
    }

    head2 = modify(head);

    print(head2);

    return 0;
}

node *modify(node *head){

    int counter, pass, m;

    node *curr = head;
    node *track = head;
    node *precNode;

    while (track != NULL){
        counter = 0;
        pass = 0;
        m = track->val;
        while( curr != NULL){
            if(m == (curr)->val){
                pass++;
                counter++;
                if(pass > 1){
                    node *removed = curr;

                    precNode->next = (curr)->next;

                    curr = (curr)->next;
                    free(removed);

                }
                if(pass == 1)
                {
                    precNode = curr;
                    curr = curr->next;
                }
            }
            else{
                precNode = curr;
                curr = (curr)->next;
            }    
        }
        track->rip = counter;
        track = track->next;
        curr = track;
    }

    return head;
}

void print(node *head2){

    while(head2 != NULL){
        printf("[%d, %d]  ->   ", head2->val, head2->rip);
        head2 = head2->next;
    }
    printf("\n");
} 
```
#包括
#包括
类型定义结构节点{
int-val;
int-rip;
结构节点*下一步;
}节点;
节点*修改(节点*头);
作废打印(节点*head2);
int main(){
int m,i;
printf(“多少节点:\n”);
scanf(“%d”、&m);
node*head=NULL;
头=(节点*)malloc(节点大小);
节点*温度=头部;
node*head2=NULL;
printf(“在头部位置写入值:\n”);
scanf(“%d”,&temp->val);
温度->rip=0;
temp->next=NULL;
对于(i=0;inext=(node*)malloc(sizeof(node));
printf(“将值写入位置%d:\n”,i);
温度=温度->下一步;
scanf(“%d”,&temp->val);
温度->rip=0;
temp->next=NULL;
}
head2=修改(head);
打印(标题2);
返回0;
}
节点*修改(节点*头){
int计数器,通过,m;
节点*curr=头部;
节点*轨迹=头部;
节点*prec节点;
while(track!=NULL){
计数器=0;
通过=0;
m=轨道->价值;
while(curr!=NULL){
如果(m==(当前)->val){
pass++;
计数器++;
如果(通过>1){
节点*removed=curr;
precNode->next=(curr)->next;
curr=(curr)->next;
自由(移除);
}
如果(通过==1)
{
precNode=curr;
当前=当前->下一步;
}
}
否则{
precNode=curr;
curr=(curr)->next;
}    
}
轨道->rip=计数器;
轨道=轨道->下一步;
curr=轨道;
}
回流头;
}
作废打印(节点*head2){
while(head2!=NULL){
printf(“[%d,%d]->”,head2->val,head2->rip);
head2=head2->next;
}
printf(“\n”);
} 
```

好吧,如果能看到更多的代码和运行就好了,但在我看来,这段代码确实分配了m+1个节点。你先分配头,然后再分配m个……然后详细说明Frank的评论:如果你只想分配
m
节点,而不是
m+1
,那么你应该完全按照你所做的去做,除了,你应该少分配一个节点。塔达!是的,我正在分配m+1节点,但我不知道如何修复它,因为最后一个循环是获取最后一个输入所必需的,我如何修复它?您需要所有的代码吗?
for(i=0;i
应该这样做,否?否,因为假设m=1,它不会请求单个节点的输入,在其他情况下,例如m=3,它不会请求第三个节点的输入