#include <iostream>
using namespace std;
class LinkList;
class Node {
friend class LinkList;
private :
int data;
Node * next;
};
class LinkList {
private :
Node * head;
public:
LinkList() {
head = new Node ;
if (!head){
cout <<" can't init List"<<endl;
exit(0);
}
head->next =0;
}
~LinkList() {
Node * current ;
while ( head) {
current = head->next;
delete head;
head =current;
}
//head->next = 0;
}
bool IsEmpty()const {
if (head->next)
return false;
else
return true;
}
int Length() {
int i = 0;
Node * current = head->next;
while( current) {
i++;
current =current->next;
}
return i;
}
int Find( const int &elem) const {
int i = 0;
Node *p = head->next;
while (p) {
i++;
if ( p->data == elem) {
return i ;
}
p=p->next;
}
return 0;
}
bool GetElem (int pos ,int &elem) {
int i = 1;
Node * p =head->next;
while ( p && i< pos ) {
i++;
p =p->next;
}
if (!p || i>pos ){
cout <<" error "<<endl;
return false;
}
elem = p->data;
return true;
}
bool Insert( int pos ,const int & elem) {
int i =0 ;
Node * p =head;
while ( p&& i <pos -1) {
i++ ;
p = p->next;
}
if ( !p || i >pos -1) {
cout <<" Insert ERROR "<<endl;
return false;
}
Node * q = new Node ;
q->data = elem;
q->next = p->next;
p->next = q;
return false;
}
bool Delete(int pos ,int &lem) {
int i = 0;
Node *p = head ;
while ( p->next && i<pos -1) {
p =p->next;
i++;
}
if( !p || i> pos-1) {
return false;
}
Node * q ;
q = p->next;
lem = q->data;
p->next = q->next;
delete q;
return true;
}
void Show() {
int leng =Length();
cout<< leng<<endl;
Node * p =head->next;
for (int i =0; i< leng ;i++) {
cout << i+1<<" is " <<p->data<<endl;
p = p->next;
}
}
};
int main()
{
LinkList L ;
L.Insert(1,3);
L.Insert(2,5);
L.Insert(1,7);
//L.Insert(8,3);
L.Insert(3,3);
cout <<" Length "<< L.Length()<<endl;
int el =5;
cout<<" 5 is in"<<L.Find(el)<<endl;
L.Show();
cout<<"now delete"<<endl;
L.Delete(1 ,el);
L.Delete(2,el);
L.Show();
}
顺序链表 带头结点的
最新推荐文章于 2021-10-12 21:46:34 发布