定义:
typedef char ListData;
typedef struct node
{
ListData data;
struct node * link;
}ListNode;
typedef ListNode * LinkList;
LinkList first; //定义头指针
LinkList last; //定义尾指针
1.清空链表
//删除除头结点外所有节点
void EmptyList(LinkList first)
{
ListNode * q;
while(first->link!=NULL) //获取头结点后继节点,逐个删除并释放
{
q = first->link; //将q指针指向头结点的后继
first->link = q->link; //将头结点的指针域指向头结点后继的后继
free(q); //释放q指针指向的内存空间
}
}
2.计算单链表长度
int Length(LinkList first)
{
ListNode * p = first->link; //初始化遍历指针指向头结点后继
int count = 0;
while(p!=NULL)
{
p = p->link;
count++; //遍历链表
}
return count;
}
3.按值查找
ListNode * Find(LinkList first,ListData value)
{
ListNode * p = first->link;
//遍历链表,直到找到相应的值或者链表末尾
while(p!=NULL&&p->date!=value)
{
p = p->link;
}
return p;
}
4.按序号查找(定位)
//返回第i个节点的地址
ListNode * Locate(LinkList first,int i)
{
if(i<0) return NULL; //查找结点小于0
ListNode * p = first->link;
int k = 0; //计数
while(p!=NULL&&k<i) //顺序查找直到查找到第i-1个节点或者链表末尾
{
p = p->link; //将p指向遍历的节点的后继
k++;
}
if(k==i){
return p;
}else{
return NULL;
}