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);
}
时间: 2024-10-03 22:40:00

sicily 1000. LinkedList的相关文章

[email&#160;protected] [273] Integer to English Words (String &amp; Math)

https://leetcode.com/problems/integer-to-english-words/ Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1. For example, 123 -> "One Hundred Twenty Three" 12345 -> "Tw

Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.      3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用

To Java程序员:切勿用普通for循环遍历LinkedList

ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) arrayList.add(i);

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要  和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数

List ArrayList LinkedList vector简介与区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全 一.同步性 ArrayList,LinkedList是不同步的,而Vestor

普通for循环遍历LinkedList弊端

java开发过程中,用到的最多的List集合就属ArrayList与LinkedList.对于ArrayList的遍历,通常是下面的方法: public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) arrayList.add(i); for (int i = 0; i < 100; i

描述一下 ArrayList,LinkedList,Vestor各自实现和区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: 一.同步性 ArrayList,LinkedList是不同步的,而Vestor是同步的.所以如果不要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费的开销.但在多线程的情况下,有时候就不得不使用Vector了.当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低.

ArrayList、Vector、LinkedList的区别及其优缺点? (转载)

原文链接:http://blog.csdn.net/wangzff/article/details/7296648 ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: 一.同步性 ArrayList,LinkedList是不同步的,而Vestor是同步的.所以如果不要求线程安全的话,可以使用ArrayList或 LinkedList,可以节省为同步而耗费的开销.但在多线程的情况下,有时候就不得不使用Vecto

ArrayList LinkedList Vector

ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Ve