| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1009 人关注过本帖
标题:出个题目,O(n)时间里逆转单链表 补全函数。
取消只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
收藏
 问题点数:0 回复次数:2 
出个题目,O(n)时间里逆转单链表 补全函数。

补写reverse函数,实现链表逆转。

递归的,非递归的。


程序代码:
#include<iostream>       
using namespace std;     
struct Exception{        
    Exception(){cout<<"Exception"<<endl;}
};                                     
template<class Type>                   
struct node{                           
    Type val;                          
    node<Type> *next;                  
    node<Type>(){next=NULL;}           
    node(Type v):val(v){next=NULL; }   
    friend ostream & operator<<(ostream &out,node<Type> & n)
        {                                                 
            out<<n.val;                                   
            return out;                                   
        }                                                 
};                                                        
template <class Type>                                     
class SList{                                              
private:                                                  
    node<Type> *hummy;                                    
protected:                                                
    node<Type> * getPre(node<Type> *pointer)              
        {                                                 
            try{                                          
                node<Type> * n;                           
                for(n=hummy;n!=NULL;n=n->next)            
                {                                         
                    if( n->next==pointer)                 
                        break;                            
                }                                         
                if( pointer== hummy)                      
                    throw Exception();                    
                return n;                                 
            }catch( Exception () )                        
            {                                             
                cout<<"Fist node with out pre node"<<endl;
                return NULL;                              
            }                                             
        }                                                 
    node<Type> * getNext(node<Type> *pointer)             
        {                                                 
            try{                                          
                if(pointer->next==NULL)                   
                    throw Exception ();                   
                return pointer->next;                     
            }catch( Exception e)                          
            {                                             
                cout<<"End of List"<<endl;                
                return NULL;                              
            }                                             
                                                          
        }                                                 
    bool insert(node<Type> *pointer, Type v)              
        {                                                 
            try                                           
            {                                             
                node<Type> *n=new node<Type>(v);          
                if( NULL == n )                           
                    throw Exception();                    
                else                                      
                {                                         
                    n->next=pointer->next;                
                    pointer->next=n;                      
                    return true;                          
                }                                         
            }catch (Exception e )                         
            {                                             
                cout<<"New Error"<<endl;                  
                return false;                             
            }                                             
        }                                                 
    bool del(node<Type> *pointer)                         
        {                                                 
            try                                           
            {                                             
                if( pointer != hummy->next)               
                {                                         
                    node<Type> * pre=getPre(pointer);     
                    pre->next=pointer->next;              
                    delete pointer;                       
                    pointer=NULL;                         
                }                                         
                else                                      
                {                                         
                    hummy->next=pointer->next;            
                    delete pointer;                       
                    pointer=NULL;                         
                }                                         
            }catch( Exception())                          
            {                                             

            }
        }  
public:    
    SList(){ hummy=new node<Type>();}
    SList(int n)                   
        {
            hummy=new node<Type>();
            for( int i=0;i<n;i++)
            {
                Type m;
                cin>>m;
                insert(hummy,m);
            }
        }
    friend void reverse( SList & s)
        {
        }
    void travel()
        {
            node<Type> * n;
            for( n=hummy->next; n!=NULL;n=n->next)
            {
                cout<<*n<<" ";
            }
            cout<<endl;
        }
};
int main()
{
    int m;
    cin>>m;
    SList<int> sl(m);
    sl.travel();
    reverse(sl);
    sl.travel();
    return 0;
}

搜索更多相关主题的帖子: 时间 函数 单链 
2010-01-07 19:05
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
回复 2楼 BlueGuy
Who cares....
2010-01-07 19:18
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用lijm1989在2010-1-8 14:00:38的发言:

取出结节重装~~~好像是O(n)。。。非递归。。LZ看看合格不合格。。。不合格不要骂哈~~~大老远从这个贴(  https://bbs.bccn.net/thread-295021-1-1.html ) 飞过来的~~~递归的就不说了。。
#include<iostream>      
 ...


good

VC这种垃圾编译器, 我那里已经重载输出流了。在structs里面。

g++ checked over.
2010-01-08 14:54
快速回复:出个题目,O(n)时间里逆转单链表 补全函数。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036230 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved