想实现单链表的元素逆置,但发现基本都是用结构体实现的,既然C++的特色就是面对对象,那么当然也能用面对对象来实现,而且可以把链表的节点封装起来,也更加安全,于是参考了一些文章,做了一些优化并添加了注释,有问题的话可以留言
//C++用类实现单链表的元素首尾逆置
#include <iostream>
using namespace std;
typedef struct LNode
{
int data;//数据
LNode *next;//指向下一个节点的指针
}LNode, *LinkList;//LNdoe是普通节点,LinkList是头节点
class List
{
private:
LinkList L; //L指向头节点
int len; //链表长度
public:
List()
{//构造函数
len = 0;
L = new LNode;
L->next = NULL;
}
~List()
{//析构函数
delete[] L;
}
void insert(int n)
{//尾插法
LNode *r = L; //尾指针
LNode *p = new LNode; //指向新节点的指针
p->next = NULL;
p->data = n;
len++;
if(L->next == NULL)
{
L->next = p;
return;
}
while(r->next != NULL) //使r指向尾节点
{
r = r->next;
}
r->next = p;
}
void print()
{//遍历链表
cout<<"一共有"<<len<<"个结点"<<endl;
LNode *p = NULL;
p = L->next; //pz指向首元节点
while(p)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
void reverse()
{
if(L->next == NULL || L->next->next == NULL)
{
return;
}
LNode *p = L->next;
LNode *q = p->next;
LNode *r = NULL;
while(q)
{
r = q->next;
q->next = p;
p = q;
q = r;
}
L->next->next = NULL; //首元节点变尾节点
L->next = p; //现在p指向尾节点,尾节点变首元节点
}
};
int main()
{
List l;
l.insert(3);
l.insert(5);
l.insert(19);
l.insert(4);
l.insert(8);
l.insert(10);
l.insert(23);
l.insert(7);
cout<<"逆置前: ";
l.print();
l.reverse();
cout<<"逆置后: ";
l.print();
}
参考文章地址(63条消息) C++面向对象方式建立链表以及相关操作_面向对象编程设计用模板设计链表_糖醋web排骨的博客-CSDN博客