一、求带有头结点的单链表长度
算法思路:沿带头节点单链表L的首元结点计数统计单链表长度
算法描述:
- 顺链头开始,计数器j初值为0;当前指针p指向链表L的首元结点 p=L—>next
- p依次往后(计数j++)直到表尾(p=NULL)
二、建立空表
InitList(LinkList *L)/*建立空表*/
{
L=(LinkList)malloc(sizeof(Node));/*建立头结点*/
L->next=NULL;/*建立空的单链表*/
}
(一)、头插法建表
算法描述:
已知空链表L,依次读入结点数据头插入,直到读入结束标志为止。
每插入一个结点到表头的步骤:
- 生成新结点s
- 将结点s插入到首元结点之前,即表头结点之后;
(二)、尾插法建表
算法描述:已知空链表L,设置尾指针r指向当前表尾
依次读入结点数据尾插入,直到读入结束标志时将表尾结点链域置空
每插入一个结点到表尾的步骤:
- 生成新结点s
- 将结点s插入到表尾r结点之后,该结点作为当前表尾结点;
三、单链表的查找
(一)、按序号查找
算法描述:
- 从头查找 当前指针p指向表头L;
- 顺链计数 表未查完且未找到,则计数器j加1,p指针后移;
- 结果判断 如找到第i个结点,则返回结点p;如表查完未找到,则返回空。
(二)、按值查找
算法描述:
- 从表头开始,p指向链表L首元结点 p=L->next;
- 当表未查完时,若当前结点值不为key,则指针p后移;比较当前结点值为key,则跳出循环
- 结束返回p指针的位置
四、单链表的插入
算法描述:
1.确定第i-1个结点的位置(可用按序号查找)
2.申请新结点
3.插入挂链:新结点s插至第i-1个结点之后;
S结点的后继指向第i个结点 S->next=pre->next
第i-1个结点的指针指向s pre->next=s
五、单链表的删除
算法描述:
1.确定第i-1个结点的位置p(同按序号查找算法)
2.删除并释放第i个结点
指针r指向被删结点 r=p->next
删除第i个结点r p->next=r->next
释放r结点 free(r)