• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 183,  comments - 10,  trackbacks - 0

            單鏈表的逆轉(zhuǎn)

            帶頭結(jié)點(diǎn)的單鏈表
            一種方法是判斷是否沒(méi)有數(shù)據(jù)節(jié)點(diǎn)、只有一個(gè)數(shù)據(jù)節(jié)點(diǎn)。這種情況不翻轉(zhuǎn),在翻轉(zhuǎn)循環(huán)里還要判斷是否只有是第一個(gè)結(jié)點(diǎn),如果是則將該結(jié)點(diǎn)的 next 置為 0。
            一種效率更好的方式是:

            void reverse(Node* head)
            {
             Node
            * p1, *p2, *p3;
             p1 
            = p2 = 0;
             p3 
            = head->next;
             
            while (p3 != 0)
             {
              p2 
            = p3;
              p3 
            = p3->next;
              p2
            ->next = p1;
              p1 
            = p2;
             }
             head
            ->next = p2;
            }


            這種方式即包括了沒(méi)有數(shù)據(jù)節(jié)點(diǎn)、只有一個(gè)數(shù)據(jù)節(jié)點(diǎn)的情況,也可以處理將第一個(gè)結(jié)點(diǎn)的 next 置為 0 的情況。
            所以這種方式既明確效率也更高。

             1 #include <iostream>
             2 using namespace std;
             3 
             4 template <typename T>
             5 class Link
             6 {
             7 public:
             8     template <typename T>
             9     struct Node
            10     {
            11         T   data;
            12         Node<T>* next;
            13     };
            14 private:
            15     Node<T>* head;
            16 public:
            17     Link()
            18     {
            19         head = new Node<T>;
            20         head->next = 0;
            21     }
            22     ~Link()
            23     {
            24         Node<T>* p = head->next, *= 0;
            25         while (p != 0)
            26         {
            27             q = p->next;
            28             delete p;
            29             p = q;
            30         }
            31         delete head;
            32     }
            33     Node<T>* Head()
            34     {
            35         return head;
            36     }
            37     void insert(T item, Node<T>* p)
            38     {
            39         Node<T>* q = new Node<T>;
            40         q->next = p->next;
            41         q->data = item;
            42         p->next = q;
            43     }
            44 
            45     void reverse()
            46     {
            47         Node<T>* p1, *p2, *p3;
            48         p1 = p2 = 0;
            49         p3 = head->next;
            50         while (p3 != 0)
            51         {
            52             p2 = p3;
            53             p3 = p3->next;
            54             p2->next = p1;
            55             p1 = p2;
            56         }
            57         head->next = p2;
            58     }
            59 
            60     // friend template <typename T> ostream& operator <<(ostream& out, Link<T>& link);
            61 };
            62 
            63 template <typename T>
            64 ostream& operator <<(ostream& out, Link<T>& link)
            65 {
            66     const Link<T>::Node<T>* p = link.Head()->next;
            67     while (p)
            68     {
            69         out << p->data << ' ';
            70         p = p->next;
            71     }
            72     return out;
            73 }
            74 
            75 int main()
            76 {
            77     Link<int> link;
            78     for (int i = 0; i < 10++i)
            79     {
            80         link.insert(i, link.Head());
            81     }
            82     cout << link << endl;
            83 
            84     link.reverse();
            85 
            86     cout << link << endl;
            87 }
            posted on 2011-04-29 00:13 unixfy 閱讀(297) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产一区二区久久久| 91久久九九无码成人网站| 武侠古典久久婷婷狼人伊人| 久久婷婷人人澡人人爽人人爱| 亚洲午夜久久久久久久久电影网| 国产精品对白刺激久久久| 久久久久这里只有精品| 色综合久久综合中文综合网| 久久精品99无色码中文字幕| 久久久久亚洲av无码专区导航| 亚洲国产成人久久综合一| 国产A级毛片久久久精品毛片| 久久精品国产亚洲综合色| 奇米影视7777久久精品人人爽| 久久久精品免费国产四虎| 狠狠色婷婷久久一区二区| 88久久精品无码一区二区毛片 | 国产精品久久久久久久人人看| 久久精品国产99久久久| 少妇熟女久久综合网色欲| 伊人久久大香线焦综合四虎| 久久精品国产亚洲AV嫖农村妇女| 色欲综合久久躁天天躁| 99久久精品无码一区二区毛片| 国内精品人妻无码久久久影院| 久久国产AVJUST麻豆| 久久国产精品免费| 精品久久久久久无码中文字幕| 99精品久久精品一区二区| 久久午夜羞羞影院免费观看| 久久人人爽人人爽人人片AV不| 久久久久九九精品影院| 久久精品国产99久久香蕉| 国产精品无码久久久久| 国产亚州精品女人久久久久久 | 日韩AV无码久久一区二区| 狠狠精品久久久无码中文字幕| 国内精品久久久久影院亚洲| 久久亚洲AV无码精品色午夜 | 国产69精品久久久久久人妻精品 | 久久美女网站免费|