• sicily 1000. LinkedList


    Description

     template <typename E>

    class LinkedList
    {
    private:
     
      // inner class: linked-list node
      class Node
      {
      public:
        E data;
        Node * next;
      };
     
      Node * first;
     
    public:
      LinkedList() {
        first = 0;
      }
     
      ~LinkedList() {
        while (first != 0) {
          removeFirst();
        }
      }
     
      E getFirst() {
        return first->data;
      }
     
      bool isEmpty() {
        return first == 0;
      }
     
    // 实现下列4个函数:
      LinkedList(const LinkedList & that);
      LinkedList & operator= (const LinkedList & that);
      void removeFirst() ;
      void addFirst(E data);
    };

    Hint

     链表的插入使用头插法,只需提交模板类函数的实现即可,不需要提交main函数,如下列代码所示:

    template <typename E>
    void LinkedList<E>::removeFirst()
    {
        Node * node = first;
        first = node->next;
        delete node;
    }
     
    代码如下:
    template <typename E>
    LinkedList<E>::LinkedList(const LinkedList & that) {
        Node* current = 0;
        Node* node = that.first;
        while (node != 0) {
            if (current == 0) current= first = new Node();
            else {
                current->next = new Node();
                current = current->next;
            }
            current->data = node->data;
            current->next = 0;
            node = node->next;
        }
    }
    
    template <typename E>
    LinkedList<E>& LinkedList<E>::operator= (const LinkedList & that) {
        LinkedList<E> tmp(that);
        while (first != 0) removeFirst();
        Node* current = 0;
        Node* node = tmp.first;
        while (node != 0) {
            if (current == 0) current= first = new Node();
            else {
                current->next = new Node();
                current = current->next;
            }
            current->data = node->data;
            current->next = 0;
            node = node->next;
        }
        return *this;
    }
    
    template <typename E>
    void LinkedList<E>::removeFirst()
    {
        Node * node = first;
        first = node->next;
        delete node;
    }
    
    template <typename E>
    void LinkedList<E>::addFirst(E data) {
        Node* newFirst = new Node();
        newFirst->data = data;
        newFirst->next = first;
        first = newFirst;
    }

    测试代码:

    template <typename E>
    class LinkedList
    {
    private:
    
      // inner class: linked-list node
      class Node
      {
      public:
        E data;
        Node * next;
      };
    
      Node * first;
    
    public:
      LinkedList() {
        first = 0;
      }
    
      ~LinkedList() {
        while (first != 0) {
          removeFirst();
        }
      }
    
      E getFirst() {
        return first->data;
      }
    
      bool isEmpty() {
        return first == 0;
      }
    
    // TODO:
      LinkedList(const LinkedList & that);
      LinkedList & operator= (const LinkedList & that);
      void removeFirst() ;
      void addFirst(E data);
    };
    
    
    /*template <typename E>
    LinkedList<E>::LinkedList(const LinkedList<E> & that) 
    {
        
    }
    
    template <typename E>
    LinkedList<E> & LinkedList<E>::operator= (const LinkedList<E> & that) 
    {
        
    }
    
    template <typename E>
    void LinkedList<E>::removeFirst() {
        Node * node = first;
        first = node->next;
        delete node;
    }
    
    template <typename E>
    void LinkedList<E>::addFirst(E data)
    {
        
    }
    
    
    */
    
    //#include "source.cpp"
    
    #include <iostream>
    using namespace std;
    
    LinkedList<double> read() {
      LinkedList<double> list;
      for (int i = 0; i < 10; ++ i) {
        double value;
        cin >> value;
        list.addFirst(value);
      }
      return list;
    }
    
    void removeAndPrintAll(LinkedList<double> list) {
      while (! list.isEmpty()) {
        cout << list.getFirst() << endl;
        list.removeFirst();
      }
    }
    
    int main() {
      LinkedList<double> list = read();
      LinkedList<double> list2;
      list2 = list;
      removeAndPrintAll(list2);
    }
  • 相关阅读:
    CSDNReader(android客户端)发布!!
    linux下的C语言快速学习—从1+1开始。
    linux下的C语言快速学习—进程和文件
    ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
    CSDN阅读器(android版)开发总结
    算法实现将一个输入的数字颠倒(输入12345>54321)
    linux下的C语言快速学习—计算机体系结构基础简单了解
    实现一个字符串查找子串的函数
    .net4.0面向对象学习笔记—数据类型
    装饰器模式
  • 原文地址:https://www.cnblogs.com/zmj97/p/6262064.html
Copyright © 2020-2023  润新知