编程——两种list的翻转方法

来源:互联网 发布:淘宝哪家零食店好 编辑:程序博客网 时间:2024/06/04 17:58

对于题目相信大家都比较熟悉了,下面就直接上代码了,其中没有给出list的creat函数,有兴趣的同学可以自己实现吐舌头

1. 模板node的定义

    template<class T> class TNode
   {
   public:
       TNode(const T& data) : next_(0)
       {
            data_ = data;
        }

       ~TNode()
      {

      }

  public:
   T data_;
   TNode<T>* next_;
  };

2. 非递归方式

  TNode<T>* reverse(TNode<T>* head)
   {
        TNode<T>* pre = 0;
        TNode<T>* suc = 0;
        while ( head != 0 )
        {
             suc = head->next_;
             head->next_ = pre;

             pre = head;
             head = suc;
        }

        head = pre;

        return head;
   }

3. 递归方式

  TNode<T>* recurReverse(TNode<T>* head)
   {
        if ( 0 == head || 0 == head->next_ )
        {
             return head;
        }

        TNode<T>* finalHead = recurReverse(head->next_);
        head->next_->next_ = head;
        head->next_ = 0;

        return finalHead;
   }

 

 



 

0 0