我怎样才能从我拥有的列表中的一个节点中只删除一个元素?
How could I delete only one element from a node from the list I have?
我的插入和显示功能如下所示:
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\t",current->rollnumber);
printf("src:%2d\t", current->src);
printf("dest:%2d\t", current->dst);
printf("gentime:%0.1f\n", current->gentime);
}
}
void display(Node** set, int i)
{
output(set[i]);
putchar('\n');
}
还有结构:
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
此外,我是否可以在不影响整个列表的情况下完成我想要的 link[i]?
谁能告诉我如何进行?
如果我没理解错的话,函数可以如下所示
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;
}
我的插入和显示功能如下所示:
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\t",current->rollnumber);
printf("src:%2d\t", current->src);
printf("dest:%2d\t", current->dst);
printf("gentime:%0.1f\n", current->gentime);
}
}
void display(Node** set, int i)
{
output(set[i]);
putchar('\n');
}
还有结构:
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
此外,我是否可以在不影响整个列表的情况下完成我想要的 link[i]? 谁能告诉我如何进行?
如果我没理解错的话,函数可以如下所示
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;
}