单链表解析Ⅲ

来源:互联网 发布:centos7网络配置 编辑:程序博客网 时间:2024/06/14 12:24

定义:

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;}
原创粉丝点击