链表操作笔记

来源:互联网 发布:中国光伏行业协会数据 编辑:程序博客网 时间:2024/06/15 02:42
/**链表基本操作增,删,查,改,创建,摧毁2016.12.7*/#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<queue>#include<algorithm>#include<stack>using namespace std;typedef struct node{    int data;    struct node *next;}NODE;///遍历链表void showList(NODE *head){    NODE *p=head;    while(p){        if(!p->next){///细节处理链表最后一个元素后加换行,其余加空格            printf("%d\n",p->data);        }        else{            printf("%d ",p->data);        }        p=p->next;    }}///摧毁链表,释放每个节点的内存void des(NODE *p){    while(p){        des(p->next);        free(p);    }}///在第一个5后面添加一个5void addNode(NODE*head){///参数列表新的head(1)指向主函数的head(2),两个指针指向同一块内存。    NODE *p=head,*tmp;    while(p->data!=5)p=p->next;    tmp=(NODE*)malloc(sizeof(NODE));    tmp->data=p->data;    tmp->next=p->next;    p->next=tmp;}///在每一个奇数后添加100void addList(NODE*head){    NODE*p=head;    while(p){        if(p->data%2){            NODE*q=(NODE*)malloc(sizeof(NODE));            q->data=100;            q->next=p->next;            p->next=q;        }        p=p->next;    }}///删除节点,测试为删除数据为5的节点NODE* del(NODE**head){///指向指针的指针    NODE *p=*head,*q;    q=p->next;    while(q){        if(q->data==5){            p->next=q->next;            free(q);            q=p->next;        }        else{            p=p->next;            q=q->next;        }    }    if((*head)->data==5){///如果头要删除是,返回新的头指针        p=*head;        *head=(*head)->next;        free(p);    }}int main(){    NODE *head,*tail,*p;    head=tail=NULL;    int a;    while(~scanf("%d",&a)){///创建链表,以EOF为结束        p=(NODE*)malloc(sizeof(NODE));        p->data=a;        p->next=NULL;        if(!head){            tail=head=p;        }        else{            tail->next=p;            tail=p;        }    }    //addNode(head);    //addList(head);    del(&head);    showList(head);    return 0;}

1 0
原创粉丝点击