将链接列表插入另一个链接列表

时间:2013-06-29 19:23:45

标签: c list pointers linked-list head

我有一个链接列表,包括像这样的字符......

node1 - "p"
    node2 - "o"
        node3 - "p"

我需要一个可以接受三个参数的函数......

node *replaceChar(node *head, char key, char *str)

此功能的规定。 head是列表的头部,'key'和'str'保证仅包含字母数字字符(A-Z,a-z和0-9)。 str的范围为1到1023个字符(包含)。

所以如果我用这些参数调用这个函数..

node *head == /*the head of the list to be examined*/

char key == "p"

char *str == "dog"

新列表将如下所示......

node1 - 'd'
    node2 - 'o'
        node3 - 'g'
            node4 - 'o'
                node5 - 'd'
                    node6 - 'o'
                        node7 - 'g'

'p'的所有实例都被'dog'替换

我有一个toString函数,它接受一个字符串并将其转换为链表并返回头部。所以假设你可以在str =“dog”上调用函数,所以......

toString(str) == /*this will return the head to the list made from the str*/

如果不清楚我的问题是什么......我很难理解如何编写带有三个参数的replaceChar函数..我可以使用字符串创建一个新列表并查找键的所有实例但是新列表适合旧列表而不会丢失指针就是杀了我。

我已经尝试过了......

while(head->data != NULL)
    {
        if(head->data == key)
           { 
               node *newListHead = toString(str);

               head = newListHead;

               /*here I lose track of the old list*/

1 个答案:

答案 0 :(得分:0)

你可以这样开始:

node *replaceChar(node *head, char key, char *str) 
{
    node *cur, prev;
    for (cur = head, prev = NULL; cur != NULL; prev = cur, cur = cur->next)
        if (cur->ch == key) {
            node *hstart = toString(str);
            for (node *hend = hstart; hend->next != NULL; hend = hend->next)
                ;
            if (prev == NULL)
                head = hstart;
            else
                prev->next = hstart;
            hend->next = cur->next;
            free(cur);
        }

}

我的假设: 您的节点结构如下:

sturct node {
    char ch;
    struct node* next;
};

toString(str)效果很好。