单链表的测长和打印和节点查找、插入、删除、逆置

来源:互联网 发布:什么软件测八卦 编辑:程序博客网 时间:2024/06/06 01:05
//返回单链表的长度int length(node *head){    int len = 0;    node *p;    p = head->next;    while(p!=NULL)  //遍历链表    {        len++;        p = p->next;    }    return len;}
//打印单链表void print(node *head){    node *p;    int index = 0;    if(head->next ==NULL)    {        printf("Link is empty!\n");        return;    }    p = head->next;    while(p!=NULL)    {        printf("The %dth node is: %d\n",++index,p->data);        p= p->next;    }}
//查找单链表pos位置的节点,返回节点指针//pos0开始,0返回head节点node *search_node(node *head,int pos){    node *p = head->next;    if(pos<0)    {        printf("incorrect position to search node!\n");        return NULL;    }    if(pos==0)    {        return head;    }    if(p==NULL)    {        printf("Link is empty!\n");        return NULL;    }    while(--pos)    {        if((p = p->next) ==NULL)        {            printf("incorrect position to search node!\n");            break;        }    }    return p;}
//在单链表pos位置处插入节点,返回链表头指针//pos0开始计算,0表示插入到head节点后面node *insert_node(node *head,int pos,int data){    node *item = NULL;    node *p;    item = (node*)malloc(sizeof(node));    item->data = data;    if(pos==0)    {        head=>next = item;        return head;    }    p = search_node(head,pos); //获取位置pos的节点指针    if(p!=NULL)    {        item->next= p->next; //原先p的后一个节点给item        p->next = item;    }    return head;}
//单链表的删除//删除单链表的pos位置的节点,返回链表头指针//pos1开始计算,1表示删除head后的第一个节点node *delete_node(node * head,int pos){    node *item = NULL;    node *p = head->next;    if(p==NULL)    {        printf("Link is empty!\n");        return NULL;    }    p = search_node(head,pos-1);    if(p!=NULL&&p->next!=NULL)    {        item = p->next;        p->next = item->next;        delete item;    }    return head;}
//逆置node *reverse(node *head){    node *p,*q,*r;    if(head->next==NULL)    {        return head;    }    p = head->next;    q = p->next;    p->next=NULL;    while(q!=NULL)    {        r = q->next;        q->next = p;        p = q;        q = r;    }    head->next = p;    return head;}
阅读全文
0 0