在本人所写的代码:在链表创建的时候,需要自己输入一个个数来充当每个节点的数据,当输入零的时候,链表穿创建结束,但0本身并没有存储到链表里面去,当然,这里的0也可以自己改成一个字符,这样更好一点,不会让链表本身无法存储0这个数字。另外,本人创建的时候是创建了一个带头结点的链表。链表的插入本人是分成三个部分来写的,分别是头插,尾插,中插。
具体实现代码如下:
#include <iostream>
using namespace std;
typedef struct node
{
int date;
struct node *next;
}Node;
class LinkList
{
private:
Node *head;
public:
LinkList(); //初始化单链表
~LinkList();
int GetLength(); //获取单链表的长度
bool IsEmpty(); //判断是否为空
void Creat(); // 创建链表
void HeadInsertNode(int date); // 从头部插入指定的元素
void EndInsertNode(int date); //从尾部插入指定元素
void IndexInsertNode(int n,int date); //从指定位置后面插入元素
void DeleteIndexNode(int n); //删除指定位置的元素
void Reverse(); //反转链表
void Display(); //显示链表
};
LinkList::LinkList()
{
Node *tmp = new Node;
head= tmp;
}
LinkList::~LinkList()
{
Node *p = head;
while(head)
{
p = head;
head = head->next;
delete(p);
}
}
bool LinkList::IsEmpty()
{
}
int LinkList::GetLength()
{
int length = 0;
Node *p = head->next;
while( p != NULL )
{
length++;
p = p->next;
}
return length;
}
void LinkList::Creat()
{
Node *p,*s;
int x,cycle=1;
p = head;
while(cycle)
{
cout << "please inpur a number:" << endl;
cin >> x;
if(x!=0)
{
s = new Node;
s->date = x;
p->next = s;
p = s;
}
else
cycle = 0;
}
//head = head->next;
p->next = NULL;
cout << "链表建立成功!" << endl;
}
void LinkList::HeadInsertNode(int date)
{
Node *p1 = new Node;
p1->date = date;
p1->next = head->next;
head->next = p1;
}
void LinkList::IndexInsertNode(int n,int date)
{
Node *p = head->next;
int count = 0;
int length = GetLength();
if( n <= 0 || length < n)
cout << "插入位置不正确!" << endl;
while(p != NULL)
{
count++;
if( count == n )
{
node *p1 = new Node;
p1->date = date;
p1->next = p->next;
p->next = p1;
}
p = p->next;
}
}
void LinkList::EndInsertNode(int date)
{
Node *p = head->next;
while( p != NULL )
{
if( p->next == NULL )
{
Node *p1 = new Node;
p1->date = date;
p1->next = NULL;
p->next = p1;
break;
}
p = p->next;
}
}
void LinkList::Reverse()
{
if( head->next == NULL )
{
cout << "链表为空,无需翻转" << endl;
exit(0);
}
Node *p1, *p2, *p3;
p1 = head; p2 = head->next;
while(p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next->next = NULL;
head->next = p1;
}
void LinkList::Display()
{
Node *p = head->next;
while( p != NULL )
{
cout << p->date <<" ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList A;
A.Creat();
A.Display();
A.HeadInsertNode(99);
A.Display();
A.EndInsertNode(88);
A.Display();
A.Reverse();
A.Display();
A.IndexInsertNode(3,888);
A.Display();
return 0;
}
运行结果截图: