//Node.h 结点类模板
#ifndef NODE_H
#define NODE_H
//类模板的定义
template<class T>
class Node {
private:
Node<T>* next;//指向后继结点的指针
public:
T data;//数据域
Node(const T& data,Node<T> *next);//构造函数
void insertAfter(Node<T>* p);//在本结点之后插入一个同类结点p
Node<T>* deleteAfter();//删除本结点的后继结点,并返回其地址
Node<T>* nextNode();//获取后继结点的地址
const Node<T>* nextNode() const;//获取后继结点的地址
};
//类的实现部分
//构造函数,初始化数据和指针成员
template<class T>
Node<T>::Node(const T& data, Node<T>* next/*=0*/) :data(data), next(next) {};
//返回后继结点的指针
template<class T>
Node<T>* Node<T>:: nextNode() {
return next;
}
//返回后继结点的指针
template<class T>
const Node<T>* Node<T>::nextNode()const {
return next;
}
//在当前节点后插入结点p
template<class T>
void Node<T>::insertAfter(Node<T>* p) {
p->next = next;
next = p;
}
//删除本结点的后继结点,并返回其地址
template<class T>
Node<T>* Node<T>::deleteAfter() {
Node<T>* temPtr = next;//将欲删除的结点的地址存储在temPtr中
if (temPtr == 0) {//如果当前没有后继结点,则返回空指针
return 0;
}
next = temPtr->next;//使当前的指针域指向temPtr的后继结点
return temPtr;//返回被删除结点的指针
}
#endif // !NODE_H
#pragma once
#include<iostream>
#include<iomanip>
#include"Array.h"
#include"Node.h"
using namespace std;
//链表结点类的应用
//生成链表
//查找某值并删除
//程序结束之前清空链表
int main() {//主函数
int a[10];
Node<int> n[10];//必须要写无参构造函数
cout << "输入十个整数:" << endl;
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
//a一一对n赋值
for (int i = 0; i < 9; i++) {
n[i].data = a[i];
n[i].insertAfter(&n[i + 1]);
}
n[9].data = a[9];
//将数组首地址赋值给数组指针名np
Node<int>* np = &n[0];
//从头往后遍历 n[0]的地址放的是头结点
while (np != NULL) {
cout << np->data << " ";
np =