2015-06-19 108 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; 
    } 
} 
相關問題