cylist
user_8384735
c_cpp
3 years ago
1.8 kB
9
Indexable
//linklistHW.cpp #include <iostream> using namespace std; #define shift(x) x = x->next class Linklist; class ListNode{ private: int data; ListNode *next; public: ListNode():data(0),next(0){}; ListNode(int x):data(x),next(0){}; friend class Linklist; }; class Linklist{ private: bool hascycle(){} public: ListNode *head, *rear; ListNode *povit; Linklist() : head(0), rear(0){}; void printList(); void push(int x); void Delete(ListNode*, ListNode*); void game(int m); void setpovit(int k); }; void Linklist::printList(){ cout << head->data; for (ListNode *cur = head->next; cur; shift(cur)){ if (cur == head) break; cout << " " << cur->data; } cout << endl; } void Linklist::push(int x){ ListNode *newnode = new ListNode(x); if (!head){ head = rear = newnode; head->next = rear->next = head; } else { rear->next = newnode; shift(rear); newnode->next = head; } } void Linklist::Delete(ListNode *Before, ListNode *x){ ListNode *p = x; ListNode *ori = head; if (x == head){ head = povit = x->next; do shift(x); while (x->next != ori); x->next = head; }else { p = Before->next; Before->next = povit = x->next; delete p; p->next = x->next; } } void Linklist::game(int m){ ListNode *cur = povit, *p = NULL; for (int i = 1; i <= m; i++, shift(cur)){ if (i == m){ cout << endl << cur->data << " deleted\n"; Delete(p, cur); break; } p = cur; } } void Linklist::setpovit(int k){ povit = head; for (int i = 1; i < k; i++) shift(povit); } int main(){ Linklist list1; int n, m, k; cin >> n >> k >> m; for (int i = 1; i <= n; i++) list1.push(i); list1.setpovit(k); for (int i = 0; i < n; i++){ list1.game(m); } }
Editor is loading...