gpt4 book ai didi

C编程-在特定节点后将值插入单链表

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:27 26 4
gpt4 key购买 nike

我有一个程序,我一直在努力工作,并且在函数 insertAfter 上不断出现段错误。我得到了基本代码并被要求创建几个函数。我已经让他们中的大部分人工作,但我无法让 insertAfter 在指定节点之后插入一个值。我没有在 insertBefore 上做太多工作,但我假设我会遇到同样的问题

所以,这是我的代码:(我也包含了头节点和创建新节点的函数)

struct lnode
{
int data;
struct lnode *next;
};


struct lheader
{
struct lnode *start;
int len;
};

struct lnode *makenode( int val )
{
struct lnode *box;
box = malloc( sizeof( struct lnode ) );
box->data = val;
box->next = NULL;
return box;
}

函数如下:

void insertAfter( struct lheader *L, struct lnode *p )
{
int pos, value;
struct lnode *nn;
struct lnode *temp;
temp = p;
printf( "What number do you want to insert? " );
scanf( "%d", &value );
printf( "Insert after which value: " );
scanf( "%d", &pos );
nn = makenode(value);
if ( L->start == NULL )
{
L->start = nn;
}
else
{
temp = L->start;
while( temp->next != NULL && temp->data != pos )
{
temp = temp->next;
}
if ( temp->data == pos )
{
nn->next = temp->next;
temp->next = nn;
printf("Value is %d: ", nn->data);
}
else
{
printf( "Value %d is not in list\n", pos );
}
}
}

我想我把这个添加到了错误的位置!

感谢您的所有意见。我不得不去接我的 child ,无法回到计划中。

这里是main函数,以及main调用的打印函数。我注释掉了一些其他功能。

void printlist( struct lnode *front )
{
struct lnode *mov;
mov = front;
while (mov != NULL)
{
printf("%d ", mov->data);
mov = mov->next;
}
printf("\n");
}


void printer( struct lheader *alist )
{
struct lnode *mov;
printf("--------------------------\n");
printf("List print, len %d\n", alist->len);
printlist( alist->start );
printf("--------------------------\n");
}


int main()
{
struct lheader *L;
struct lnode *head, *tmp;
struct lnode *mark;
int i, x;

L = makelist();

for (i = 1; i <= 5; ++i)
{
x = rand() % 25 + 1;
printf("-- Adding -- %d\n", x);
//insertFront( L, x );
insertBack( L, x, i );
printer( L );
}


printf(">>>>Value to search: ");
scanf("%d", &x);
i = isInList(L, x);
printf("I is %d\n", i);
tmp = findNode(L, x);
if (tmp == NULL)
{
printf("NOPE\n");
{
else
{
printf("Found node %d\n", tmp->data);
{
insertAfter( L, mark );
// printer( L );
// insertBefore( L, mark );
// printer( L );
return 0;
}

我尝试了一个调试器(第一次),它说段错误是在 temp = temp->next 在下面的代码片段中:

else
{
temp = L->start;
while( temp->next != NULL && temp->data != pos )
{
temp = temp->next;
}
if ( temp->data == pos )
{
nn->next = temp->next;
temp->next = nn;
printf("Value is %d: ", nn->data);
}
else
{
printf( "Value %d is not in list\n", pos );
}
}

最佳答案

您可以像这样检查上述条件:

  • value:要插入的数据。
  • loc:插入数据的位置。

void insertAfter(int value,int loc)
{
struct node* newNode;
newNode=(struct node*)malloc(sizeof(struct node));
newNode->data=value;

if(head==NULL)
{
newNode->next=NULL;
head=newNode;
}
else
{
struct node* temp=head;
while(temp->next!=NULL)
{
if(temp->data==loc)
{
newNode->next=temp->next;
temp->next=newNode;
break;
}
else
{
temp=temp->next;
}
}
if(temp->next==NULL)
printf("Location not found");
}
printf("New Node inserted successfully after %d",loc);
}

关于C编程-在特定节点后将值插入单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392607/

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