链表的头插法

来源:互联网 发布:制作电子文档软件 编辑:程序博客网 时间:2024/06/06 17:57

没想到一个看似简单的链表的头插法……昨天我竟然写了一个多小时……而且最后还不对……大话数据结构只有函数部分,主函数是怎么调用的并没有写,可能大部分人都觉得都已经把最难的部分写出来了,没必要都写全,可是每一部分对我来说都很难……九月份就找工作了对自己表示担忧。。。

主函数在调用createLink()函数时,createLink里有两个参数,对于第一个参数的传入有两种写法:

1、Linklist head=NULL;

createLink(&head,10);

2|、Linklist *head=(Linklist*)malloc(sizeof(Node));
    createLink(head,10);

3、我写的是Linklist *head=NULL;

createLink(head,10);

然而这是错的,我以为既然可以传head的地址进去(head是NODE*类型的),那么定义一个指向head的指针并传入head,也是一样的。结果显示这是错的,经二哥指正说应该是因为creatLink()函数我们是为了用这个头结点,传入一个我们定义好的NODE * head=NULL的head地址,修改的直接就是head,虽然head(指向NODE类型的头结点)为空(LINKLIST *L=&head就是L指向这个内容为空的头结点head)。但是当传入NODE** head=NULL;时,是指向NODE*的head指针为空,而NODE* 也没有为他分配一个内存空间,NODE*是NULL,在create函数里*L=(Linklist)malloc(sizeof(Node));运行到这句话就出错了!但是当*head这么定义时:Linklist *head=(Linklist*)malloc(sizeof(Node));程序运行正确

#include <iostream>

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
typedef struct Node
{
    int data;
    struct Node *next;
}Node;
typedef struct Node *Linklist;
void createLink(Linklist *L,int n)
{
    Linklist p;
    int i;
    srand(time(0));
    *L=(Linklist)malloc(sizeof(Node));
    (*L)->next=NULL;
    for(i=0;i<n;i++)
    {
        p=(Linklist)malloc(sizeof(Node));
        p->data=rand()%100+1;
        p->next=(*L)->next;
        (*L)->next=p;
    }
    Linklist *ptr=L;
   while((*ptr)->next!=NULL)
   {
       cout<<(*ptr)->data<<endl;
       (*ptr)=(*ptr)->next;
   }
}
int main()
{
   // cout << "Hello world!" << endl;
    Linklist *head=(Linklist*)malloc(sizeof(Node));
    createLink(head,10);
    //Linklist *L=Linklist &head;
   // Linklist *L=Linklist *head;
    return 0;
}
原创粉丝点击