|
发表于 2018-10-18 15:48:41
|
显示全部楼层
这是我看完视频自己写的,有些代码不一样但是基本上算是可以成功进行 添加 删除 获取某位置元素 和 初始化 以及得到链表长度的链表结构操作方法
#include <iostream>
#include <cstdlib>
using namespace std;
struct Node
{
int data;
Node *next;
};
//获取链表指定位置元素
bool GetElem(Node *nd,int i,int *el)
{
Node * p = nd;
int j = 1;
while (p!=NULL && j < i)
{
p = p->next;
j += 1;
}
if (p == NULL || j > i)
{
delete p;
return false;
}
*el = p->data;
return true;
}
//插入链表元素
bool InsertElem(Node *nd, int i,Node *el)
{
Node *p = nd;
int j = 1;
while (p!=NULL && j < i-1)
{
p = p->next;
j += 1;
}
if (p == NULL || j > i)
{
return false;
}
Node *s = p->next;
p->next = el;
el->next = s;
return true;
}
//得到链表长度
int NodeListLength(Node *nd)
{
int j = 0;
Node *p = nd;
while (p != NULL)
{
p = p->next;
j += 1;
}
return j;
}
//删除元素
bool DeleteListElem(Node *nd, int i)
{
Node * p = nd;
int j = 1;
while (p != NULL && j < i - 1)
{
p = p->next;
j += 1;
}
if (p == NULL || j > i)
{
return false;
}
p->next = p->next->next;
return true;
}
void CreateListTail(Node *nd, int n)
{
Node *p = nd;
for (int i = 0; i < n; i++)
{
Node * s = new Node;
s->data = rand() % 999;
p->next = s;
s->next = NULL; //将下一个指针为NULL
p = s;
}
}
int main()
{
Node s1{ 1,NULL };
Node * s0 = &s1;
int el;
cout << "链表创建....\n";
CreateListTail(s0,10);
cout << "链表创建完成...\n链表的总长度为:";
std::cout << NodeListLength(s0) << endl;
cout << "展示链表元素:\n";
for (int i = 1; i <= NodeListLength(s0); i++)
{
GetElem(s0, i, &el);
std::cout << el << endl;
}
int num;
cout << "输入您要删除的元素位置:";
cin >> num;
if (DeleteListElem(s0, num) && num <= NodeListLength(s0))
{
cout << "删除成功...." << endl;
}
else {
cout << "删除失败...." << endl;
}
cout << "展示链表元素:\n";
for (int i = 1; i <= NodeListLength(s0); i++)
{
GetElem(s0, i, &el);
std::cout << el << endl;
}
cout << "链表的总长度为:";
std::cout << NodeListLength(s0) << endl;
std::system("pause");
return 0;
}
|
|