[ create a new paste ] login | about

Link: http://codepad.org/fiXjHEgj    [ raw code | output | fork ]

C++, pasted on Nov 24:
#include <iostream>

struct slist {
	int    num;
	slist* next;
};

bool slist_add(slist*& head, slist*& tail, int num);
void slist_clear(slist*& head, slist*& tail);
void slist_print(std::ostream& hout, const slist* p);

//вставить после нечётного элемента
void slist_insert(slist*& head, slist*& tail, int num){
	slist* p;
	for(slist* i = head; i != NULL; i = i->next){
		if(i->num % 2){
			p = new (std::nothrow) slist();
			if(p == NULL)
				break;
			p->num  = num;
			p->next = NULL;

			if(i == tail){
				tail->next = p;
				tail = p;
				break;
			} else {
				p->next = i->next;
				i->next = p;
			}
		}
	}
}

int main(void){
	slist* head = NULL, *tail = NULL;
	
	int  a[] = { 1, 3, 5, 7, 9,  8, 11, 512, 333 };
	int i, n = sizeof(a)/sizeof(a[0]);
	for(i = 0; i < n; ++i)
		slist_add(head, tail, a[i]);

	slist_print(std::cout, head);

	int k = 0;
	for(const slist* p = head; p != NULL; p = p->next){
		if(!(p->num % 2))
			k = p->num;
	}

	slist_insert(head, tail, k);
	slist_print(std::cout, head);
	slist_clear(head, tail);
	return 0;
}

//вставка в конец списка
bool  slist_add(slist*& head, slist*& tail, int num){
	slist* p = new (std::nothrow) slist();
	if(p != NULL){
		p->next = NULL;
		p->num  = num;
		if(head == NULL)
			head = tail = p;
		else {
			tail->next = p;
			tail = p;
		}
	}
	return (p != NULL);
}

//удаление всего списка
void slist_clear(slist*& head, slist*& tail){
	slist* t;
	while(head != NULL){
		t    = head;
		head = head->next;
		delete t;
	}
	tail = NULL;
}

//печать списка
void slist_print(std::ostream& _out, const slist* p){
	for(; p != NULL; p = p->next)
		_out << p->num << ' ';
	_out << std::endl;
}


Output:
1
2
1 3 5 7 9 8 11 512 333 
1 512 3 512 5 512 7 512 9 512 8 11 512 512 333 512 


Create a new paste based on this one


Comments: