[英]C Issue #4 - Double-Linked List Delete All Odd Numbers From a Doubly Linked List
I am trying to delete all odd numbers from a doubly linked list.我正在尝试从双向链表中删除所有奇数。 I understand the rough concept, but I am having trouble with implementing it in C.
我了解粗略的概念,但在 C 中实现它时遇到了麻烦。 Hope someone could help me out with this!
希望有人可以帮助我解决这个问题!
This is the code that I wrote for this.这是我为此编写的代码。 All the best!
一切顺利!
typedef struct lista
{
int broj;
struct lista *prev;
struct lista *next;
}Lista;
Lista *MakeNew ();
Lista *AllocateNode ();
void AddOnEnd ( Lista **p);
int DeleteOddNumbers( Lista **p );
void PrintList ( Lista *p);
int main()
{
int i, n; printf("N: "); scanf("%d", &n); putchar('\n');
Lista *lista_brojeva;
for ( i = 0; i < n; i++ )
AddOnEnd(&lista_brojeva);
int a;
a = DeleteOddNumbers(&lista_brojeva);
PrintList(lista_brojeva);
}
int DeleteOddNumbers( Lista **p )
{
Lista *tmp = *p;
if ( tmp != NULL && tmp->broj % 2 != 0 )
{
*p = tmp->next;
free(tmp);
return 1;
}
else
{
while ( tmp != NULL && tmp->broj % 2 != 0 )
tmp = tmp->next;
if ( tmp == NULL ) return 0;
tmp->prev->next = tmp->next;
free(tmp);
}
}
One easy solution would be to allocate a new list and to push each even node back to it, then free the first list.一个简单的解决方案是分配一个新列表并将每个偶数节点推回它,然后释放第一个列表。 This way, your
DeleteOddNumbers
function should be very simple:这样,您的
DeleteOddNumbers
function 应该非常简单:
void delete_odd_numbers(t_lst **lst)
{
t_lst *new_lst = NULL;
t_lst *tmp = *lst;
while (tmp)
{
if (tmp->value % 2 == 0)
push_back(&new_lst, tmp->value);
tmp = tmp->next;
}
free_lst(*lst);
*lst = new_lst;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.