这个大概设计思想和一维数组差不多 只不过这个大部分都是用指针来进行的 当时比较懵的地方是在创建的时候 下面画图解释
-> 相当于结构体中的 . 由于是指针 所有不能用 .
p->data 代表p的数值域
p->next 代表p的指针域 指向下一个指针 (A的->next指向的是B)
#include<iostream>
#include<algorithm>
using namespace std;
struct Lnode //数据节点
{
int data;
Lnode *next;
};
void InitList(Lnode *&L) //创建空的单链表
{
L = (Lnode *)malloc(sizeof(Lnode));
L->next = NULL;
}
int ListLength(Lnode *L) //返回单链表的长度
{
int ans = 0;
Lnode *p = L; //(要注意是Lnode * p = L)
while (p->next != NULL) //如果 下一个节点不为空,肯定是有数据存储的,于是ans++;
{
ans++;
p = p->next;
}
return ans;
}
void CoutList(Lnode *L) //输出每个节点的信息
{
Lnode *p = L->next; //从头开始(要注意是Lnode *p = L->next)
while (p != NULL) //如果当前节点不为空,则 输出信息
{
printf("%d", p->data);
p = p->next;
}
}
bool GetElem(Lnode *L, int i, int &e) //修改某个位置上的数据信息
{
int j = 0;
Lnode *p = L;
while (j < i && p != NULL) //如果没有遍历到i-1并且链表没有结束
{
j++; //接着找
p = p->next;
}
if (p == NULL) //如果结束时是因为链表结束了,则说明 i超出了范围
return false;
else