头结点(无尾结点)单链表的逆序

#include <IOSTREAM>
using namespace std;

struct Node
{

    int data;
    Node * next;

};

class LinkList
{public:
    Node *Head;
    void CreatList(int length);
    void Display();
};

void LinkList::CreatList(int length)  //尾插法创建链表
{
    Node *p, *q;
    p=Head;
    cout <<"依次输入" <<length <<"链表元素:\n";
    for(int i=0; i<length; i++)
    {
        q=new Node;
        cin >>q->data;
        q->next=p->next;
        p->next=q;
        p=q;
    }
}

void LinkList::Display()     //遍历输出链表
{
    Node *p;
    p=Head->next;
    while(p)
    {
        cout <<p->data <<' ';
        p=p->next;
    }
    cout <<endl;
}
//////////////////////////////////////////////////////////////////////////

int main()
{
    LinkList la, lb;                   //创建链表la,lb
    Node *p;
    int n;
    cout <<"输入链表长度: \n";
    cin >>n;
    la.CreatList(n);
    p=la.Head->next;
    while(p)                            //将la的元素头插入lb中
    {
        Node *s;
        s=new Node;
        s->data=p->data;
        s->next=lb.Head->next;
        lb.Head->next=s;
        p=p->next;

    }
    lb.Display();

    return 0;
}

程序看了许久,发现指针无所指(囧...是朋友告诉我的),所以加了构造函数和析构函数~如下

class LinkList
{public:
Node *Head;
LinkList() ;                         //构造函数
~LinkList();                         //析构函数
void CreatList(int length);
void Display();
};
LinkList::LinkList()
{
    Head=new Node;
    Head->next=NULL;
}

LinkList::~LinkList()
{
    Node *p;
    while(Head)
    {
        p=Head;
        Head=Head->next;
        delete p;
    }
    Head=NULL;//头结点指向空
}


这样就完美地完成了我的第一个数据结构程序了~

而且感觉算法也不错,时间复杂度为O(n),虽然浪费了点空间。

posted on 2013-10-20 20:30  缠绕寂寞  阅读(279)  评论(0)    收藏  举报