codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> struct slist { int val; slist* next; }; void slist_remrep(slist*& lst); void slist_copy(slist*& lst, const int* fa, const int* la); void slist_clear(slist* lst); int main(void){ slist* L = NULL; int a[] = {0,0,0,0,1,1,2,2,2,3,4,4,4,4,5,5,6,7,7,7}; slist_copy(L, a, a + sizeof(a)/sizeof(a[0])); slist_remrep(L); for(const slist* p = L; p != NULL; p = p->next) std::cout << p->val << ' '; std::cout << std::endl; slist_clear(L); return 0; } //удаление подряд идущих одинаковых значений void slist_remrep(slist*& lst){ slist* t, *i, *j, *p = lst; while(p != NULL){ i = p->next; while((i != NULL) && (i->val == p->val)) i = i->next; if(i != p->next){ j = p->next; while(j != i){ t = j; j = j->next; delete t; } p = p->next = i; continue; } p = p->next; } } //копирование массива void slist_copy(slist*& lst, const int* fa, const int* la){ slist* p, *t = NULL; lst = NULL; while(fa != la){ p = new (std::nothrow) slist(); if(p == NULL) break; p->val = *fa++; p->next = NULL; if(lst == NULL) lst = t = p; else { t->next = p; t = p; } } } //удаление всех void slist_clear(slist* lst){ slist* t; while(lst != NULL){ t = lst; lst = lst->next; delete t; } }
Private
[
?
]
Run code
Submit