1.带头指针的单链表的初始化(cpp和c语言两种语言实现)
c语言
Status InitList(LinkList* s)
{
s = (LinkList*)malloc(sizeof(Node)); //动态获得SNode的字节数,从而开辟一块空间
if (s != NULL) {
s->next = NULL;
return OK;
}
else {
return ERROR;
}
}
原文链接:https://blog.csdn.net/Conquer_ALL/article/details/102536618
cpp
Status InitList_L(LinkList&L){
L=new Lnode;
L->next=NULL;
return OK;
}
c和cpp实现初始化不同,但都是从内存中找到空间,获得存储空间的地址,赋值给相应的链表。
2.判断链表是否为空
注意一下空链表的含义
3.销毁链表
同样可以用c和cpp两种两种语言实现,不同的代码
关键步骤:L=L->next; 让指针移动,指向下一个结点,下一个结点赋值给L,先把头指针删除,再依次删除其他的结点。不能再插入结点,整个链表的空间都已经被释放了,不能再进行操作。
// 删除链表中为值为i的结点
Status DeleteList(LinkList* s, int i) {
if (!empty(s)) {
// 但删除结点的前一个结点
Node* current = position(s, i);
// 待删除的结点
Node* toDel = current->next;
current->next = toDel->next;
free(toDel); //c语言的关键字free
toDel = NULL;
return OK;
}
else {
return ERROR;
}
}
————————————————
原文链接:https://blog.csdn.net/Conquer_ALL/article/details/102536618
cpp的关键字为delete
循环算法:
(1)循环条件:L!=NULL; 或L
(2)结束条件:L==NULL 链表已经被删光了
4.清空链表
注意与销毁链表的区别
引入一个指针q作为中间值,更新地址,
还可以再插入结点,头指针仍然存在
注意循环语句的先后顺序
5.计算单链表的长度
遍历链表
i=0,计数的开始 p=p->next 指针移动,指向下一个结点