头结点(无尾结点)单链表的逆序
#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),虽然浪费了点空间。
浙公网安备 33010602011771号