链表的每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。一个结点中必须包含一个指针变量,用来存放下一个结点的地址。实际上,链表中的每个结点可以用若干个数据和若干个指针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构。
定义单链表结构的简单形式如下:
struct Node
{
int Data;
Node*next;
};
#include "stdafx.h"
#include<iostream>
using namespace std;
#define ERROR NULL
//先构建一个节点类
class Node
{
public:
int data; //数据域
Node * next; //指针域
};
//再构建一个单链表类
class LinkList
{
public:
//创建一个空的单链表;
LinkList();
//销毁一个单链表
~LinkList();
//创建一个非空单链表
void CreateLinkList(int n);
//遍历线性表
void TravalLinkList();
//获取线性表长度
int GetLength();
//判断单链表是否为空
bool IsEmpty();
//查找节点
Node* Find(int data);
//在尾部插入指定的元素
void InsertElemAtEnd(int data);
//在指定位置插入指定元素
void InsertElemAtIndex(int data,int pos);
//在头部插入指定元素
void InsertElemAtHead(int data);
//在尾部删除元素
void DeleteElemAtEnd();
//删除所有数据
void DeleteAll();
//删除指定的数据
void DeleteElemAtPoint(int data);
//在头部删除节点
void DeleteElemAtHead();
//删除指定位置的结点
void DeletePosJiedian(int pos);
//链表逆序
void ReverseList();
//判断链表是否为循环单链表
bool IsLoopList();
private:
Node * head; //头结点
};
//创建一个空的单链表
LinkList::LinkList()
{
head = new Node; //先创一个结点作为头结点
head->data = 0; //将头结点的数据域定义为0
head->next = NULL; //头结点指向NULL
}
//销毁一个空单链表
LinkList::~LinkList()
{
delete head; //删除头结点
}
//创建一个非空单链表
void LinkList::