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。