【发布时间】:2019-02-17 13:55:22
【问题描述】:
我是学生(还是个菜鸟),我有一个问题。我必须删除单链表中的一对节点,其总和等于k。 例如,如果链表是 13->4->5->4->3 和 k=9,那么我的函数应该将链表转换为 13->3 (4+5=9, 5+4=9)。这是我未完成的代码:
typedef struct _node
{
int value;
struct _node* next;
}Node;
void remove(Node **list, int k)
{
if(*list == NULL || (*list)->next == NULL)
return;
Node *prev = *list;
Node *tmp = (*list)->next;
while(tmp != NULL)
{
if(prev->value + tmp->value == k)
{
free(prev);
prev = tmp->next;
free(tmp);
tmp = tmp->next->next;
}
}
}
我有一个想法,但我不知道如何在 while 循环中设置条件。 有谁知道如何重写这个?
【问题讨论】:
-
欢迎来到 SO。你的要求有点不清楚。您是否必须删除成对的数字或任何可以与任何其他数字配对以匹配
k的数字?4->5->4部分不是一对或两对。删除第一对4->5后,没有更多的对要删除。根据您的目标,代码看起来会非常不同。
标签: c linked-list singly-linked-list