zoukankan      html  css  js  c++  java
  • 链表操作笔记

    /**
    	链表基本操作
    	增,删,查,改,创建,摧毁
    	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
    ",p->data);
            }
            else{
                printf("%d ",p->data);
            }
            p=p->next;
        }
    }
    ///摧毁链表,释放每个节点的内存
    void des(NODE *p){
        while(p){
            des(p->next);
            free(p);
        }
    }
    ///在第一个5后面添加一个5
    void 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;
    }
    ///在每一个奇数后添加100
    void 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;
    }
    


  • 相关阅读:
    基于物品的协同过滤推荐算法
    监督学习与非监督学习的区别
    深入了解当前ETL的一些基本技术
    基于hadoop的图书推荐
    基于KNN的相关内容推荐
    KNN算法的补充
    Confluence 6 升级中的一些常见问题
    Confluence 6 升级以后
    Confluence 6 在升级之前
    Windows 独立启动方式安装 Archiva
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/6260746.html
Copyright © 2011-2022 走看看