C 列出m个节点,其中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
#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,它不会请求第三个节点的输入