頭文件
#pragma once
#include <iostream>
using namespace std;
//創(chuàng)建一個(gè)節(jié)點(diǎn)
//先聲明一下list類
template <class T> class List;
template <class T>
class Node
{
//對(duì)list類作友元
friend class List<T>;
private:
//創(chuàng)建一個(gè)數(shù)據(jù)域
T data;
//創(chuàng)建一個(gè)指針域
Node* link;
//節(jié)點(diǎn)的構(gòu)造函數(shù)
Node(T);
};
template <class T>
class List
{
public:
//構(gòu)造函數(shù),初始化一下first指向0
List() { first = 0; };
//頭插
void head_add(T);
void show_list();
void delete_node(T);
private:
//設(shè)置鏈表最開(kāi)始的指針
Node<T> *first;
};
//節(jié)點(diǎn)的構(gòu)造函數(shù)
template<class T>
Node<T>::Node(T elem)
{
data = elem;
link = 0;
}
template<class T>
//頭插法
void List<T>::head_add(T k)
{
//創(chuàng)建一個(gè)新的指針淤井,開(kāi)辟一個(gè)新的節(jié)點(diǎn)布疼,把要插入的元素傳進(jìn)來(lái)
Node<T>* new_node = new Node<T>(k);
//?這個(gè)地方是吧new_node指向了first,first=0币狠,所以是指向了first的0嗎游两?
new_node->link = first;
//?然后first又指向了new_node了嗎漩绵?
first = new_node;
}
//show函數(shù)
template<class T>
void List<T>::show_list()
{
//通過(guò)一個(gè)指針來(lái)從頭走到尾
//定義一個(gè)指針贱案,如果他不指向空,它等于它的下一個(gè)
for (Node<T> *i = first;i; i = i->link)
{
//輸出當(dāng)前所指向的數(shù)據(jù)域
cout << i->data;
//如果它的下一個(gè)不為空輸出“->”
if (i->link) cout << "->";
}
cout << endl;
}
template<class T>
void List<T>::delete_node(T k)
{
Node<T>* pre = 0;
Node<T>* cur;
for (cur = first;cur && cur->data != k;pre = cur , cur = cur->link)
{
//空循環(huán)什么都不做止吐,就找到那個(gè)元素
}
if (cur)
{
if (pre) pre->link = cur->link;
else first = first->link;
delete cur;
}
}
源文件
#include<iostream>
using namespace std;
#include"單鏈表基本操作.h"
int main()
{
List<int> l1;
l1.head_add(5);
l1.head_add(25);
l1.head_add(35);
l1.head_add(45);
l1.show_list();
l1.delete_node(45);
l1.show_list();
return 0;
}