zoukankan      html  css  js  c++  java
  • 链表--insert

    分别是使用了二级指针和一级指针的两种方法,最后会按插入的顺序依次打印1,2,3,4

    主要区别在于,使用二级指针,可以在main函数里直接用一个空的Node指针,而一级指针是在main函数里面先添加了一个空的头结点

    因为二级指针是传的指针的指针,所以main函数里直接用Node *head  = NULL后 , 传&head是没有问题的,因为传的是head的指针的指针,所以在Insert函数里会修改指针的地址。

    而一级指针就不行,如果传进去head的指针之后,最终传回来的还是一开始的结果为NULL的指针地址,相当于是以前常看到的,创建一个函数来交换两个变量,可以通过传指针来修改指针所指向的变量。而我们传的head的指针,相当于这个变量,在函数里无论怎么修改这个指针,最终之前传进去的指针并不会变。

    也就是说,如果你要在函数里(比如下面insert函数)改变指针的地址,那就传指针的指针来修改指针的地址。

    使用二级指针---insert 

    #include <iostream>
    
    using namespace std;
    
    class Node {
    public:
        int data;
        Node* next;
    };
    
    void Insert(Node** h, int new_data)
    {
        cout << h << endl;
        cout << *h << endl;
        Node* newnode = new Node();
    
        Node* last = *h;
        
    
        newnode->data = new_data;
        newnode->next = NULL;
    
        if (*h == NULL)
        {
            *h = newnode;
    
            return;
        }
    
    
        while (last->next != NULL)
        {
            cout << last << endl;
            last = last->next;
            cout << last << endl;
        }
    
        last->next = newnode;
        cout << last << endl;
        cout << h << endl;
        cout << *h << endl;
        cout << last->next << endl;
        return;
    }
    
    
    void print(Node* h)
    {
        if (h == NULL)
        {
            return;
        }
    
        while (h != NULL)
        {
            cout << h->data <<" ";
            h = h->next;
        }
    
        return;
    }
    
    int main()
    {
        Node* head = NULL;
    
        Insert(&head, 1);
        Insert(&head, 2);
        Insert(&head, 3);
        Insert(&head, 4);
    
        print(head);
    
        return 0;
    
    }

    使用一级指针--insert

    #include <iostream>
    
    using namespace std;
    
    class Node {
    public:
        int data;
        Node* next;
    };
    
    
    
    void insert(Node* h, int new_data)
    {
        Node* newnode = new Node();
        newnode->data = new_data;
        newnode->next = NULL;
    
        Node* last = h;
    
        while (last->next != NULL)
        {
            last = last->next;
        }
    
        last->next = newnode;
    }
    
    void print(Node* h)
    {
        if (h == NULL)
        {
            return;
        }
    
        while (h != NULL)
        {
            cout << h->data <<" ";
            h = h->next;
        }
    
        return;
    }
    
    int main()
    {
        Node* head = new Node();
        head->data = 1;
       
        insert(head, 2);
        insert(head, 3);
        insert(head, 4);
    
        print(head);
    
        return 0;
    }
  • 相关阅读:
    Python进阶-----类、对象的属性的增删改查
    SpringCloud(Finchley版) 服务注册与服务发现-Eureka原理深入
    SpringCloud项目之Eureka 配置 application.yml
    sql 获得各科最高分成绩和人数
    mysql主从同步
    Log4j.properties
    JDBC 配置 jdbc.properties
    Java 通过ant打包时给JS/Jsp/css等文件加上版本号 防止有缓存
    Ant 打包 build文件
    Java zip 压缩包下载excel文件
  • 原文地址:https://www.cnblogs.com/strive-sun/p/12673129.html
Copyright © 2011-2022 走看看