【问题标题】:How to make functions (remove_by_index, remove_by_val) in C如何在 C 中创建函数(remove_by_index、remove_by_val)
【发布时间】:2020-03-28 06:31:38
【问题描述】:

我想知道如何根据这段代码制作 2 个函数:

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int val;
    struct node * next;
} node_t;



node_t* create_node(int val)
{
    node_t * head = NULL;
    head = malloc(sizeof(node_t));
    if (head == NULL) {
        return NULL;
    }

    head->val = val;
    head->next = NULL;
}


void print_list(node_t * head)
{
    node_t * current = head;

    while (current != NULL) {
        printf("%d\n", current->val);
        current = current->next;
    }
}


void insert_end(node_t * head, int val)
{
    node_t * current = head;
    while (current->next != NULL) {
        current = current->next;
    }


    current->next = malloc(sizeof(node_t));
    current->next->val = val;
    current->next->next = NULL;
}


void insert_begin(node_t ** head, int val)
{
    node_t * new_node;
    new_node = malloc(sizeof(node_t));
    new_node->val = val;
    new_node->next = *head;
    *head = new_node;
}

一个函数应该删除具有给定索引的元素,第二个函数应该删除具有给定值的元素。

我是 C 语言的新手,我并不真正理解语法,因此我希望得到任何帮助。

【问题讨论】:

  • 如果你打算经常这样做,我会重新考虑你的数据结构。

标签: c list linked-list dimensional


【解决方案1】:

如果要删除特定索引,请按照以下步骤操作:

  1. 首先迭代到那个索引,从头开始。假设我们正在搜索节点 N,这样场景就变成了, (N-1) 节点-> N 节点-> (N+1) 节点。

你只需要使它成为 (N-1) 节点 -> (N+1) 节点。

您需要处理两个极端情况。如果所需的节点是第一个或最后一个节点,那么您必须以不同的方式进行操作。

如果你能像这样解决,希望你能解决第二个问题。在这种情况下,您必须从末尾开始迭代到该特定值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2010-11-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多