zoukankan      html  css  js  c++  java
  • 单链表

    写了一个单链表的模板,欢迎大家批评指正。

      1 #ifndef LINKEDLIST_H
      2 #define LINKEDLIST_H
      3 #define DEBUG
      4 
      5 #include<iostream>
      6 using namespace std;
      7 
      8 template <typename T>
      9 class LinkedList
     10 {
     11 public:
     12     template<typename T>
     13     struct Node
     14     {
     15         T data;
     16         Node* next;
     17 
     18         Node(T data,Node* next):data(data),next(next){}
     19         Node(T data):data(data),next(0){}
     20     };
     21 private:
     22     Node<T>* _head;
     23 public:
     24     LinkedList(void)
     25     {
     26         _head=0;
     27     }
     28 
     29     ~LinkedList(void)
     30     {
     31         Node<T>* p=_head;
     32         while(p){
     33             _head=_head->next;
     34             delete p;
     35             p=_head;
     36         }
     37     }
     38 
     39     Node<T>* getHead()const{
     40         return _head;
     41     }
     42 
     43     void insertInFront(T newData){
     44         _head=new Node<T>(newData,_head);
     45     }
     46 
     47     void show(){
     48         Node<T>* cur=_head;
     49         while(cur){
     50             cout<<cur->data<<' ';
     51             cur=cur->next;
     52         }
     53         cout<<endl;
     54     }
     55 
     56     void reverse(){
     57         Node<T>*cur=_head,*next;
     58         _head=0;
     59         while(cur){
     60             next=cur->next;
     61             cur->next=_head;
     62             _head=cur;
     63             cur=next;
     64         }
     65     }
     66 
     67     bool remove(Node<T>* deleteMe){
     68         //assert(deleteMe!=0);
     69         if(!deleteMe)
     70             return false;
     71 
     72         /*Node<T>* cur=_head;
     73         if(cur==deleteMe){
     74             _head=deleteMe->next;
     75 #ifdef DEBUG
     76             cout<<deleteMe->data<<" is deleted."<<endl;
     77 #endif
     78             delete deleteMe;
     79             return true;
     80         }
     81         else{
     82             while(cur){
     83                 if(cur->next==deleteMe){
     84                     cur->next=deleteMe->next;
     85 #ifdef DEBUG
     86                     cout<<deleteMe->data<<" is deleted."<<endl;
     87 #endif
     88                     delete deleteMe;
     89                     return true;
     90                 }
     91                 cur=cur->next;
     92             }
     93             return false;
     94         }*/
     95         Node<T>* pre=0,*cur=_head;
     96         while(cur&&cur!=deleteMe){
     97             pre=cur;
     98             cur=cur->next;
     99         }
    100         if(cur){
    101             if(!pre)
    102                 _head=cur->next;
    103             else
    104                 pre->next=cur->next;
    105             delete cur;
    106             return true;
    107         }
    108         return false;
    109     }
    110 
    111     Node<T>* search(T data){
    112         Node<T>* cur=_head;
    113         while(cur&&cur->data!=data){
    114             cur=cur->next;
    115         }
    116         return cur;
    117     }
    118 
    119     void remove(T data){
    120         Node<T>*pre=0;
    121         Node<T>*cur=_head;
    122         while(cur&&cur->data!=data){
    123             pre=cur;
    124             cur=cur->next;
    125         }
    126         if(cur){
    127             if(!pre){//delete head
    128                 _head=cur->next;
    129             }
    130             else{
    131                 pre->next=cur->next;
    132             }
    133             delete cur;
    134         }
    135 
    136         /*Node<T>* cur=_head;
    137 
    138         if(cur&&cur->data==data){
    139             _head=cur->next;
    140             delete cur;
    141             return;
    142         }
    143 
    144         Node<T>* pre=cur;
    145         while(pre){
    146             cur=pre->next;
    147             if(cur&&cur->data==data){
    148                 pre->next=cur->next;
    149                 delete cur;
    150                 return;
    151             }
    152             pre=cur;
    153         }*/
    154     }
    155 
    156     bool isEmpty(){
    157         return _head==0;
    158     }
     1 /*Takes a pointer to the head of a linked list and determines if the list ends
     2     *in a cycle or is NULL terminated.
     3     */
     4     bool hasCycle(){
     5         Node<T>* slow,*fast;
     6         slow=fast=_head;
     7         while(true){
     8             if(!fast||!fast->next)
     9                 return false;
    10             else if(fast->next==slow||fast->next->next==slow)
    11                 return true;
    12             else{
    13                 slow=slow->next;
    14                 fast=fast->next->next;
    15             }
    16         }
    17     }
    
    
    159 };
    160 
    161 #endif//LINKEDLIST_H
  • 相关阅读:
    数据库期末考试复习
    函数 初识
    文件操作
    深浅copy 和 集合
    数据编码补充
    字典的增删改查和嵌套
    面试题 和 python 2与3的期区别
    英文练习
    初识数据类型
    测试基础-系统测试(2)
  • 原文地址:https://www.cnblogs.com/freewater/p/2562793.html
Copyright © 2011-2022 走看看