再问:还是连表的代码~~~
#include <iostream>using namespace std;class List{public: int data; List *next;}; void CreateList (List *L){ List *p; int e; L = new List; (*L).next = NULL; cout << "creat a list and end of 0." << endl; cin >> e; while(e) { p = new List; (*p).data = e; (*p).next = (*L).next; (*L).next = p; cin >> e; }}void Traverse(List *L){ List *p; cout << "print all number:" << endl; for (p=L; p!=NULL; p=(*p).next) { cout << (*p).data; } cout << endl;}void Delete(List *L, int e){ List *p, *q; p = L; q = L; while(q && (*q).data!=e) { p = q; q = (*q).next; } if(!q) { cout << endl << "can not find! not deleted."; } else { (*p).next = (*q).next; free(q); }}void main(){ List *La; int e, select; La = NULL; while (select) { cout << " 1.creat list." << endl; cout << " 2.print all." << endl; cout << " 3.delete any." << endl; cout << " 0.exit." << endl; cin >> select; switch (select) { case 1:CreateList(La); break; case 2:Traverse(La); break; case 3:cout << " input any number:"; cin >> e; Delete(La, e); Traverse(La); break; default:break; } }}
}
}
[解决办法]
犯了重大失误,还是指针的使用上的问题,以下是在VC2005下编译通过且运行正确:
#include <iostream>using namespace std;class List{public: int data; List *next;}; void CreateList (List *&L)//这里传指针是错误的,函数形参只是La指针的一个拷贝,并不能实质上对La分配内存{ List *p; int e; L = new List; (*L).data = 0; //head 这个地方初始化 (*L).next = NULL; cout << "creat a list and end of 0." << endl; cin >> e; while(e) { p = new List; (*p).data = e; (*p).next = (*L).next; (*L).next = p; cin >> e; }}void Traverse(List *L){ List *p; cout << "print all number:" << endl; for (p=L; p!=NULL; p=(*p).next) { cout << (*p).data<< "->"; } cout << endl;}void Delete(List *L, int e){ List *p, *q; p = L; q = L; while(q && (*q).data!=e) { p = q; q = (*q).next; } if(!q) { cout << endl << "can not find! not deleted."; } else { (*p).next = (*q).next; free(q); }}void main(){ List *La; int e, select=1;//这里一定要初始化 La = NULL; while (select) { cout << " 1.creat list." << endl; cout << " 2.print all." << endl; cout << " 3.delete any." << endl; cout << " 0.exit." << endl; cin >> select; switch (select) { case 1:CreateList(La); break; case 2:Traverse(La); break; case 3:cout << " input any number:"; cin >> e; Delete(La, e); Traverse(La); break; default:break; } }}