c++实现单链表操作

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;
}

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值