一、先定义好链表的节点结构
template<class DataType>struct pNode
{
DataType data;
pNode<DataType>* next;
pNode(DataType d = 0) :data(d), next(NULL) //在c++中可以在结构中写构造函数
{}
};
二、链表的基本操作
1.链表的构造
template<class DataType>
class LinkList{
private:
pNode<DataType>* head;
public:
typedef pNode<DataType> Node;
LinkList():head(NULL)
{
sum = sum + nn;
nn++;
}
LinkList(LinkList& l)
{
if (l.head)
{
pNode<DataType>* p = l.head;
head = new Node(p->data);
p = p->next;
pNode<DataType>* node = head;
while (p)
{
node->next = new Node(p->data);
node = node->next;
p = p->next;
}
}
else
head = l.head;
}
};
2.链表的尾插
{
if (head == NULL)
{
head = new pNode<DataType>(d);
return;
}
else
{
pNode<DataType>* ret = head;
while (ret->next != NULL)
{
ret = ret->next;
}
ret->next = new pNode<DataType>(d);
}
}
3.链表的头插
扫描二维码关注公众号,回复:
1937247 查看本文章
void PushFront(DataType d){
pNode<DataType>* ret = new pNode<DataType>(d);
ret->next = head;
head = ret;
}
4.链表尾删
{
pNode<DataType>* p = head;
while (p->next->next)
{
p = p->next;
}
free(p->next);
p->next = NULL;
}
5.链表头删
{
pNode<DataType>* p = head->next;
free(head);
head = p;
}
6.打印链表
{
pNode<DataType>* ret = head;
while (ret != NULL)
{
cout << ret->data << "->";
ret = ret->next;
}
printf("NULL\n");
}
7.获取头部
{
return head;
}
8.查找某一节点
{
Node* cur = head;
while (cur)
{
if (cur->data == d)
return cur;
cur = cur->next;
}
return NULL;
}
三、总结
在这里我用C++只实现了链表的一些简单操作,在后续的更新中将会探讨关于链表的其他比较复杂的操作。在这些简单操作中,大家一定要注意细节,否则很容易出现一些低级错误。希望这篇文章对初学C++的同学有所帮助。