我如何才能从我拥有的列表中的节点中只删除一个元素呢? [英] How could I delete only one element from a node from the list I have?

查看:0
本文介绍了我如何才能从我拥有的列表中的节点中只删除一个元素呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的插入和显示函数如下所示:

int push_front( Node **head, int rollnumber, int src, int dst, double gentime )
{
    Node *new_node = malloc( sizeof( Node ) );
    int success = new_node != NULL;

    if ( success )
    {
        new_node->rollnumber=rollnumber;
        new_node->src = src;
        new_node->dst=dst;
        new_node->gentime=gentime;
        new_node->next = *head;
        *head = new_node;
    }

    return success;
}

void output(Node* head)
{
  for (Node* current = head; current != NULL; current = current->next)
  {
        printf("Roll Number:%2d	",current->rollnumber);
        printf("src:%2d	", current->src);
        printf("dest:%2d	", current->dst);
        printf("gentime:%0.1f
", current->gentime);
  }
}

void display(Node** set, int i)
{
    output(set[i]);
    putchar('
');
}

和结构:

typedef struct Node 
{
    int rollnumber, src, dst;
    double gentime;
    struct Node *next;
} Node;
例如,我仅对我想要的一个列表的输出是: (这是基于变量src的列表2,我有src 1-10)

link[2]:
Roll Number: 7  src: 2  dest: 6 gentime:78.1
Roll Number: 6  src: 2  dest:17 gentime:64.8
Roll Number: 5  src: 2  dest: 6 gentime:52.6
Roll Number: 4  src: 2  dest: 5 gentime:39.5
Roll Number: 3  src: 2  dest:20 gentime:26.0
Roll Number: 2  src: 2  dest:19 gentime:14.0
Roll Number: 1  src: 2  dest: 4 gentime:1.9

如何从上面的列表中只删除一个节点,例如:

Roll Number: 1  src: 2  dest: 4 gentime:1.9
此外,我是否可以对我想要的链接执行此操作,而不会对整个列表产生问题? 有人能告诉我如何继续吗?

推荐答案

如果我理解正确,该函数可能如下所示

int remove_node_in_list( Node **set, size_t pos )
{
    int success = set[pos] != NULL;

    if ( success )
    {
        Node *tmp = set[pos];
        set[pos] = set[pos]->next;
        free( tmp );
    }

    return success;
}

此函数删除列表数组中索引pos的列表的第一个节点。

或者,传递列表数组中的元素数也可能更好,以检查指定位置是否在数组的可接受索引范围内。

例如

int remove_node_in_list( Node **set, size_t n, size_t pos )
{
    int success = pos < n && set[pos] != NULL;

    if ( success )
    {
        Node *tmp = set[pos];
        set[pos] = set[pos]->next;
        free( tmp );
    }

    return success;
}

这篇关于我如何才能从我拥有的列表中的节点中只删除一个元素呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆