From 9d6fbceaa977e7c2d25a1b3180c4ce0f5d443c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Thu, 27 Nov 2014 11:01:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90reverse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TinySTL/List.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/TinySTL/List.h b/TinySTL/List.h index 4f1a4c1..b2dfed6 100644 --- a/TinySTL/List.h +++ b/TinySTL/List.h @@ -149,7 +149,7 @@ namespace TinySTL{ //void sort(); //template //void sort(Compare comp); - //void reverse(); + void reverse(); private: nodePtr newNode(const T& val = T()){ nodePtr res = nodeAllocator::allocate(); @@ -250,6 +250,21 @@ namespace TinySTL{ void List::clear(){ erase(begin(), end()); } + template + void List::reverse(){//²ÉÓÃβ²å·¨ + if (empty() || size() == 1) return; + auto curNode = head.p; + head.p = tail.p->prev; + head.p->prev = nullptr; + do{ + auto nextNode = curNode->next; + curNode->next = head.p->next; + head.p->next->prev = curNode; + head.p->next = curNode; + curNode->prev = head.p; + curNode = nextNode; + } while (curNode != head.p); + } } #endif \ No newline at end of file