C语言 如果一个函数已经有一个指向需要删除的节点的指针,我将如何调整链表的大小?

gzszwxb4  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(118)

比如说,我有一个包含5个元素的单链接列表。如果我在这种特定情况下删除了一个元素,我将如何调整列表的大小-
我的单向链表定义为0->1->2->3->4,这里的数字是链表的索引,假设我有一个函数f(),它返回一个直接指向索引2的指针,从这里,我想删除2,但不知道如何连接1和3,我该怎么做呢?

qvtsj1bj

qvtsj1bj1#

对于“单向链接”列表,您需要为列表中的“下一个”项维护的数据结构。
如果在你的例子中(看起来你是),限制使用一个返回指向这个链接的指针的函数,那么你可以循环并相应地删除。
例如:

struct link *f(struct link *head) {
    // Do work...
    // is found struct link *target
    return target;
}

struct link *delete_link(struct link *head, struct link *target) {
    if (head == target) {
        struct link *tmp = head;
        struct link *new_head = tmp->next;
        return new_head;
    }

    struct link *curr = head;
    while (curr->next != target) {
        struct link *tmp = curr;
        curr = curr->next;
    }
    curr->next = target->next
    free(target);
    return head;
}

int main(int argc, char *argv[])
{
    struct link {
        // data
        struct link *next;
    };

    // Construct list....
    struct link *head = construct_list(1, 2, 3, 4);
    // Do stuff...
    struct link *target = f(list);
    // Found a deletion target...
    head = delete_link(target);
    return 0;
}

相关问题