c++链表定义:
typedef void LinkList;
typedef void LinkNode;
struct LKNode
{
LKNode* next;
};
class MyLinkList1
{
public:
MyLinkList1();
~MyLinkList1();
void mylist_create();
void mylist_destroy();
void mylist_clear();
int mylist_length();
int mylist_insert(LinkNode* node, int pos);
LinkNode* mylist_get(int pos);
LinkNode* mylist_delete(int pos);
private:
int m_length;
LKNode m_head;
};
c++链表实现:
MyLinkList1::MyLinkList1()
{
m_length = 0;
m_head.next = NULL;
}
MyLinkList1::~MyLinkList1()
{
if (m_length == 0) return;
LKNode* p = (LKNode*) m_head.next;
LKNode* tmp = NULL;
while (p != NULL)
{
tmp = p;
p = p->next;
delete tmp;
}
}
void MyLinkList1::mylist_create()
{
m_length = 0;
m_head.next = NULL;
}
void MyLinkList1::mylist_destroy()
{
if (m_length == 0) return;
LKNode* p = (LKNode*)m_head.next;
LKNode* tmp = NULL;
while (p != NULL)
{
tmp = p;
p = p->next;
delete tmp;
}
}
void MyLinkList1::mylist_clear()
{
m_head.next = NULL;
m_length = 0;
}
int MyLinkList1::mylist_length()
{
return m_length;
}
int MyLinkList1::mylist_insert(LinkNode* node, int pos)
{
if (node == NULL || pos < 0)
{
return -1;
}
LKNode* nd = (LKNode*)node;
LKNode* currt = &m_head;
int np = pos;
while (np && currt->next != NULL)
{
currt = currt->next;
np--;
}
nd->next = currt->next;
currt->next = nd;
m_length++;
return 0;
}
LinkNode* MyLinkList1::mylist_get(int pos)
{
if (pos < 0)
{
return NULL;
}
LKNode* p = &m_head;
int np = pos;
while ( np && p->next != NULL)
{
p = p->next;
np--;
}
return p->next;
}
LinkNode* MyLinkList1::mylist_delete(int pos)
{
if (pos < 0)
{
return NULL;
}
LKNode* p = &m_head;
int np = pos;
while (np && p != NULL)
{
p = p->next;
np--;
}
LKNode* tmp = p->next;
p->next = tmp->next;
m_length--;
return tmp;
}
测试代码与结果:
void myClassLinkList();
int main()
{
std::cout << "Hello World!\n";
myClassLinkList();
}
void myClassLinkList()
{
struct Teacher
{
//LKNode node;
char name[64];
int age;
};
const int num = 11;
Teacher t[num];
MyLinkList1* lk = new MyLinkList1();
lk->mylist_create();
for (int i = 0; i < num; i++)
{
t[i].age = 31 + i;
lk->mylist_insert((LinkNode*)(&t[i]), 0);
}
cout << "Original linklist is: " << endl;
for (int i = 0; i < lk->mylist_length(); i++)
{
Teacher* tmp = (Teacher*)lk->mylist_get(i);
cout << tmp->age << " ";
}
cout << endl << endl;
cout << "Insert linklist 100 at 3 is: " << endl;
Teacher t1;
t1.age = 100;
lk->mylist_insert((LinkNode*)(&t1), 3);
for (int i = 0; i < lk->mylist_length(); i++)
{
Teacher* tmp = (Teacher*)lk->mylist_get(i);
cout << tmp->age << " ";
}
cout << endl << endl;
Teacher* tmp = (Teacher*)lk->mylist_delete(2);
cout << "delete linklist at 2 is: " << tmp->age << endl;
cout << "linklist is: " << endl;
for (int i = 0; i < lk->mylist_length(); i++)
{
Teacher* tmp = (Teacher*)lk->mylist_get(i);
cout << tmp->age << " ";
}
cout << endl << endl;
}
输出结果: