2015-06-19 100 views
1

我有一个链表,并且我想写一个将遍历每个节点的函数,并返回适当的元素。事情是这样的:for循环在C中:返回每个处理过的元素

struct list* returnElements(struct list *head){ 
    for (; head != NULL ; head=head->next){ 
     if (head->field1 == "something") 
      return head; 
    } 

然后调用returnElements将总得有赶上每个返回的节点,并用它做什么功能。

这是不是有可能?

+1

该功能可以将第一个有效元素结束,你可能想每个有效元素存储在列表上或堆放等,并返回,而不是 – hellyale

+3

在'returnElements'中,你可以构造一个新的列表,并返回这个列表。您不能使用单独的退货返回多个元素。 – mattm

+0

您希望每次运行'returnElements'时都返回多个(指向)节点?对的,这是可能的。 –

回答

1

我觉得没有这个功能会比较容易,所以就在函数内部调用returnElements我会创建一个新变量并将其设置为输入struct list*,然后在函数内遍历该列表,并且如果找到一个节点你需要使用,然后用它做什么这样做这样的事情:

struct list *temp = head; 
for(; temp != NULL; temp = temp->next) { 
    if(strcmp(temp->field1, "something") == 0) { 
     //DO WHATEVER YOU WANT WITH THIS NODE 
    } 
} 
+0

如果他(或她)想要立即执行更改,这很好,但如果他们缓存节点以便以后访问,则可能不是最佳方法。 – hellyale

+0

@hellyale这是非常真实的,它可能不会是在这种情况下最好的方法。他可以创建一个新的链接列表,包含他想要使用的所有节点,因此在if语句中添加将要添加到新列表中的每个节点的语句。但是我读到这个问题的方式是他想马上用它做点什么 – JackV

+0

@JackV我正在处理节点。我只是想将所有与链表相关的函数保存在我的链表模块中,然后有几个与模块链接的测试文件。 –

0
/*you can change the argument type*/ 
void getElementInNode(void *list){ 
    /*here you can store the content of the node to a global collection 
    or whatever you want here*/ 
} 
struct list* returnElements(struct list* head){ 
    extern void getElementInNode(void *p); 
    struct list* list; 

    list = head; 
    if (list == NULL){ printf("Empty\n"); } 
    while (list != NULL) { 
     if (list->field1 == "something"){ 
      getElementInNode(list); 
     } 
     list = list->next; 
    } 
}