T(n) = O(n)
L
。LinkList list_HeadInsert(LinkList &L, int n)
{
LNode *p; int x;
L = (LinkList)malloc(sizeof(LNode)); //创建头结点
L -> next = NULL;
for (int i = 0; i < n; i ++)
{
p = (LNode *)malloc(sizeof(LNode)); //生成新节点
scanf("%d", &x);
p -> data = x;
p -> next = L -> next;
L -> next = p;
}
return L;
}
T(n) = O(n)
r
。LinkList list_TailInsert(LinkList &L, int n)
{
LNode *p, *r; int x;
L = (LinkList)malloc(sizeof(LNode));
L -> next = NULL;
r = L;
for (int i = 0; i < n; i ++ )
{
p = (LNode *)malloc(sizeof(LNode));
scanf("%d", &x);
p -> data = x;
r -> next = p;
r = p;
}
r -> next = NULL; //尾结点指针置空
return L;
}
i
个结点的值,如果找到,将其保存到e
中。T(n) = O(n)
bool GetElem(LinkList L, int i, ElemType &e);
{
int j = 1;
LNode *p = L -> next; //p指向首元结点
while(p && j < i)
{
p = p -> next;
j ++;
}
if (!p || j > i) //p为空即i > n 或 i <= 0
return false;
e = p -> data;
return true;
}
T(n) = O(n)
LNode *LocateElem(LinkList L, ElemType e)
{
LNode *p = L -> next; //p指向首元结点
while (p && p -> data != e)
{
p = p -> next;
}
return p; //查找成功返回结点e的地址p,查找失败返回NULL
}
图示:
合法的插入位置:1 <= i <= n +1
。
T(n) = O(n)
bool LisTInsert(LinKList &L, int i, int e)
{
LNode *p = L, *s; int j = 0;
while (p && j < i - 1)
{
p = p -> next;
j ++;
}
if (!p || j > i - 1) //p为空即 i > n + 1 或 i < 1;
s = (LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> next = p -> next;
p -> next = s;
return true;
}
bool ListDelete(LinKList &L, int i)
{
LNode *p = L, *q; int j= 0;
while((p -> next) && (j < i - 1)) //p -> next:p的后继结点可能不存在
{
p = p -> next;
j ++;
}
if (!(p -> next)||(j > i -1))
return false;
q = p -> next; //临时存储被删除结点的地址
p -> next = q -> next;
free(q); //释放删除结点的空间
return true;
}
int ListLenth(LinkList L)
{
LNode *p = L;
int length = 0;
while (!p)
{
p = p -> next;
length ++;
}
return length;
}
原文:https://www.cnblogs.com/adios/p/12613735.html