嗯,我有一個按字母順序在列表中插入新結構體的代碼,但我遇到了一些問題。我可以讓它工作有一個功能,當我打電話時,我讓head = Insert(frota * head,char name)。該代碼是休耕如何按字母順序在列表中插入一個結構體
typedef struct robot {
int bateria;
char nome[3];
int pos_x;
int pos_y;
int target_x;
int target_y;
int limpos;
int percorridos;
struct robot * next;
}frota;
frota* Insert(frota* head, char name){
frota* temp = (frota*)malloc(sizeof(frota));
if(temp == NULL){
printf("Unable to allocate memory for new node\n");
exit(-1);
}
temp->nome[0] = 'R';
temp->nome[1] = name;
int* prevtemp = head;
int* nexttemp = head;
if(head != NULL)
{
// Corner Case: First on the list
if(temp->nome[1] <= prevtemp->nome[1])
{
head = temp;
temp->next = prevtemp;
}
else
{
// CASE: Somewhere between the first and the list
while(nexttemp->next != NULL)
{
nexttemp = nexttemp->next;
if(temp->nome[1] >= prevtemp->nome[1] && temp->nome[1] <= nexttemp->nome[1])
{
prevtemp->next = temp;
temp->next = nexttemp;
break;
}
prevtemp = prevtemp->next;
}
// Corner Case: end of list
if(nexttemp->next == NULL)
{
nexttemp->next = temp;
}
}
}
else
{
// Corner Case: We had an empty list
head = temp;
}
}
我的問題是如何使代碼工作並直接改變值頭的價值,使這樣這個函數的過程。我嘗試過的代碼是這樣的:
void Insert(frota* head, char name){
frota* temp = (frota*)malloc(sizeof(frota));
if(temp == NULL){
printf("Unable to allocate memory for new node\n");
exit(-1);
}
temp->nome[0] = 'R';
temp->nome[1] = name;
int* prevtemp = *head;
int* nexttemp = *head;
if(*head != NULL)
{
// Corner Case: First on the list
if(temp->nome[1] <= prevtemp->nome[1])
{
*head = temp;
temp->next = prevtemp;
}
else
{
// CASE: Somewhere between the first and the list
while(nexttemp->next != NULL)
{
nexttemp = nexttemp->next;
if(temp->nome[1] >= prevtemp->nome[1] && temp->nome[1] <= nexttemp->nome[1])
{
prevtemp->next = temp;
temp->next = nexttemp;
break;
}
prevtemp = prevtemp->next;
}
// Corner Case: end of list
if(nexttemp->next == NULL)
{
nexttemp->next = temp;
}
}
}
else
{
// Corner Case: We had an empty list
*head = temp;
(*head)->next = NULL;
}
}
這樣,我CAL的程序相同插入(&頭,名稱)。任何幫助將不勝感激。當我運行的代碼出現分段錯誤,而不是吶內存錯誤 PS:該代碼是不完全我的責任,發現了一些部分在線....
感恩
您是否收到錯誤消息?或者一個seg故障? 「這段代碼不運行」是什麼意思? – user1717828
這看起來很糟糕:'int * prevtemp = head;'('head'是'frota **')。 – alk
另外,它看起來好像所有的'頭部'的分配都應該改變爲'(* head)'的分配,否則它們根本就沒有意義,而反過來挑起UB。 – alk