C 更新结构列表中的单元格并返回列表
我正在寻找一种方法来更新结构列表中的单元格。 我有一个结构列表:C 更新结构列表中的单元格并返回列表,c,C,我正在寻找一种方法来更新结构列表中的单元格。 我有一个结构列表: struct _list { int startNode, targetNode, substitute; unsigned char letter; struct _list *next; } 还有一个可以让我更新单元格的函数 struct _list *insertSubstitute(struct _list *list, int startNode, unsigned char
struct _list {
int startNode,
targetNode,
substitute;
unsigned char letter;
struct _list *next;
}
还有一个可以让我更新单元格的函数
struct _list *insertSubstitute(struct _list *list, int startNode,
unsigned char letter, int substitute) {
while (list != NULL) {
if (list -> letter == letter && list -> startNode == startNode) {
list -> substitute = substitute;
return list;
}
list = list -> next;
}
return NULL;
}
我的问题是这个函数不返回整个列表。如何继续执行此操作?添加一个新的var
整个列表
以下code
可以工作:
struct _list *insertSubstitute(struct _list *list,
int startNode,
unsigned char letter,
int substitute) {
struct _list* whole_list = list;
while (list != NULL) {
if (list -> letter == letter && list -> startNode == startNode) {
list -> substitute = substitute;
break;
}
list = list -> next;
}
return whole_list;
}
您只需要使用一个指向列表的临时指针来检查元素,因为您使用的是列表,它本身就是导致问题的原因
struct _list *insertSubstitute(struct _list *list, int startNode,
unsigned char letter, int substitute) {
struct _list *temp=list;
while (temp!= NULL) {
if (temp-> letter == letter && temp-> startNode == startNode) {
temp -> substitute = substitute;
break;
}
temp= temp-> next;
}
return list;
}
试试这个:
void insertSubstitute(struct _list** list
,int startNode
,unsigned char letter
,int substitute) {
if ( list == NULL ) {
//Do nothing list is invalid
return;
}
while (*list != NULL) {
if ((*list) -> letter == letter && (*list) -> startNode == startNode) {
(*list) -> substitute = substitute;
return;
}
(*list) = (*list) -> next;
}
}
调用此版本的函数时,需要传递列表的地址
或原件的另一版本:
struct _list*insertSubstitute(struct _list* list
,int startNode
,unsigned char letter
,int substitute) {
if ( list == NULL ) {
//Do nothing list is invalid
return;
}
struct _list* rc = list;
while (rc != NULL) {
if (rc -> letter == letter && rc -> startNode == startNode) {
rc -> substitute = substitute;
return rc;
}
rc = rc -> next;
}
return NULL;
}
insertSubstitute
获取指向结构的指针,因此您正在修改源代码。为什么要返回它?已将函数原型从“struct\u list*”列表更改为“struct\u list**”,您无法修改指针并将其返回,但您可以修改指针当您将指针传递给指针时,您需要将列表的内部引用更改为“(*list)->”,如果您这样做,那么您就可以摆脱返回并将函数return更改为void。