Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我正在尝试编写一个函数,从给定的链表中删除所有奇数元素,并返回_C_List_Linked List - Fatal编程技术网

C 我正在尝试编写一个函数,从给定的链表中删除所有奇数元素,并返回

C 我正在尝试编写一个函数,从给定的链表中删除所有奇数元素,并返回,c,list,linked-list,C,List,Linked List,我试图编写一个函数,从给定的链表中删除所有的奇数元素,并返回删除的奇数元素的新链表的地址。我发现这项任务相当复杂,如果您能帮助修复或改进我的代码,我将非常高兴 以下是我迄今为止所做的工作: typedef struct list{ int data; struct list* next; } List; List* removeOddValues(List** source) { List* curr= source; List* prev;

我试图编写一个函数,从给定的链表中删除所有的奇数元素,并返回删除的奇数元素的新链表的地址。我发现这项任务相当复杂,如果您能帮助修复或改进我的代码,我将非常高兴

以下是我迄今为止所做的工作:

typedef struct list{
      int data;
      struct  list* next;
} List;


List* removeOddValues(List** source)
{
      List* curr= source;
      List* prev;
      List* odd= NULL;

      while (curr)
      {
        if ((curr->data)%2!=0)
          {
           insertNodeToEnd(&odd, curr->data);
           prev->next = curr->next;
          }
        else
          {
           prev = curr;
           curr= curr->next;
          }
      }
     return odd;
}

List* createNewNode(int newData, List*  next)
{
       List* newNode = (List)calloc(1, sizeof(List));
       newNode->data = newData;
       newNode->next = next;

       return newNode;
}

void insertNodeToEnd(List** list, type  newData) //insert a new node to list //
{
       LNode* newNode = createNewNode(newData, NULL);

    list->next= newNode;

}
像这样:

List* removeOddValues(List **source){
    List *curr = *source;
    List even = { .next = NULL };
    List *e_curr = &even;
    List odd  = { .next = NULL };
    List *o_curr = &odd;

    while(curr){
        List *next = curr->next;
        curr->next = NULL;

        if(curr->data % 2)// != 0, odd
            o_curr = o_curr->next = curr;//node add to last
        else//even
            e_curr = e_curr->next = curr;

        curr = next;
    }
    *source= even.next;//update source
    return odd.next;
}

1)
List*curr=source-->
列表*curr=*源代码。。。实际的插入/删除处理没有完成。@BLUEPIXY请解释原因。
源代码的类型是
List**
,而不是
List*
我该如何修复我的代码?由于缺少主要部分,您的代码没有处于更正级别。我发布了一个代码示例作为答案。对不起,@BLUEPIXY,它对我没有多大帮助…我希望我的代码通过使用我编写的函数得到改进…@Gal1988首先,你需要完成每个较低的函数。(这显然是不完整的。)而且要删除的代码、要执行的代码循环中存在一个缺陷。此外,还需要释放断开链接的节点。(我不认为有必要创建一个新节点)但我不知道如何完成它们……我很不清楚我应该如何通过创建一个新节点来实现它?@Gal1988我可以展示关于它们的代码,但如果你想处理你的逻辑,我想你应该先自己编写。实际上,在这个站点上有许多将节点插入列表的示例和删除示例。请搜索您自己编写的代码。如果你遇到问题,请再问一个问题。