#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
Node* arrayToList(const int arr[], size_t size) {
Node* list = /*nullptr*/0;
Node* item = /*nullptr*/0;
if(!size) return 0;
for( size_t elem = 0; elem < size; elem++ )
{
Node * a = new Node;
a->data = arr[elem];
a->next = 0;
if( item )
{
item->next = a;
item = item->next;
}
else
list =item = a;
}
return list;
}
Node* removeOdd(Node* head) {
Node* list = /*nullptr*/0;
Node* item = /*nullptr*/0;
Node* prev = /*nullptr*/0;
if ( (item = prev = head) != 0 )
{
for( item = item->next; item; item = item->next )
{
if( item->data % 2 )
{
prev->next = item->next;
cout<<"delete : "<<item->data<<endl;
delete item;
item = prev;
}
else
prev = item;
}
if( head->data % 2 )
{
list = head->next;
cout<<"delete : "<<head->data<<endl;
delete head;
}
}
return list;
}
void showList(const Node* head) {
if (! head) {
cout << "List is empty" << endl;
return;
}
else
{
Node *list = const_cast<Node*>(head);
while(list)
{
cout << list->data << " ";
list = list->next;
}
cout << endl;
}
}
int main(){
int arr[] = {1,2,3,4,5,6};
size_t size = sizeof(arr)/sizeof(*arr);
Node* list = arrayToList(arr, size);
showList(list);
list = removeOdd(list);
showList(list);
cin.get();
return 0;
}