Push和Ssearch链表

时间:2014-04-07 17:11:57

标签: c linked-list

我有一个链表,我需要通过多个功能使用它。如果一个函数将插入数据,则一个函数将打印数据,另一个函数将搜索数据。以下是strcut定义和链表的全局定义。

typedef struct node {
    char *ipVal;
    int ipVersion;
    struct node * next;
} node_t;

node_t * head;

int main ()我为链接列表分配内存,然后将函数调用insertsearch,如下所示,

int main()
{
    head = malloc(sizeof(node_t));  

    insert_to_list(); //this will generate data and will pass it to a push function 
    print();
    fetch_to_search(); //this will capture data from another source and parse those data to search linked list function
    return 0;
}

insert_to_list()如下,

void execScanNetowrk(){

    //code to generate values

    push(pIpVal, pIpVarsion);       
}

fowling是push()函数,

void push(char *pIpVal, int pIpVersion) {
    node_t * current = head;
    while (current->next != NULL) {
        current = current->next;
    }

    /* now we can add a new variable */
    current->next = malloc(sizeof(node_t));
    current->next->ipVal = pIpVal;
    current->next->ipVersion = pIpVersion;
    current->next->next = NULL;
}

并执行包含以下代码的print()函数,

void print_list() {
    node_t * current = head;
    printf("PRINT LIST\n");
    while (current != NULL) {

        printf("%s - %d\n", current->ipVal, current->ipVersion);

        current = current->next;
    }
}

问题1 - 推/打印

从这里问题是,如果我打印我得到的数据将产生类似于以下的输出,我无法弄清楚我们为什么。这里的问题是在开头获取null值,如下所示,

(null) - 0 192.169.1.2 - 4 192.168.1.1 - 4 ...

-------------------------------------------- ----------------------------------

以下fetch_to_search()是搜索功能,它将搜索值解析为实际的链接列表搜索功能linked_list_search()

void fetch_to_search() {
    //fetch data to search

    linked_list_search(data);
}

void linked_list_search(char *searchIpVal) {

    node_t * current = head;
    printf("SEARCH LIST - %s\n", searchIpVal); // Program prints this line and terminates       

    while (current != NULL) {           
        if(strcmp(current->ipVal, searchIpVal)){
            printf("FOUND %s - %d\n", current->ipVal, current->ipVersion);
        }   
        else{
            printf("NOT\n");    
        }   
        current = current->next;
    }
}

问题2 - 搜索

问题在于,当我从上面的函数linked_list_search再次搜索链接时,程序输出SEARCH LIST - %s,其中%s是我的搜索值,程序终止。

这些非常令人困惑的问题让我待到深夜仍无法得到答案,我按照Google搜索中的大部分链接(https://www.google.com/search?client=ubuntu&channel=fs&q=search+linked+list+C&ie=utf-8&oe=utf-8#channel=fs&q=search+linked+list+c),但根本没有任何帮助。

我非常感谢您的专家帮助解决这个问题。非常感谢你:))

1 个答案:

答案 0 :(得分:2)

您使用的技术不会在头节点上存储任何内容。它有好处和缺点。我喜欢使用链接列表和这个“虚拟”标题,因为编写一个函数来删除节点更容易,而不会丢失整个列表的引用。

令人遗憾的是,您使用的任何算法都必须以head-> next开头,而不是头部本身,而head本身不包含数据(只是列表的占位符)。

所以无论你把

放在哪里
node_t * current = head;

替换为

node_t * current = head->next;