「已注销」 2019-04-08 10:05 采纳率: 50%
浏览 269

很简单的一个关于单链表的问题

新手,遇到指针方面的问题,
按我观察的,在InitList函数中申请了头结点的内存,并将头结点的指针域赋值为NULL,但是不知为何退出InitList函数之后头结点的next就不是NULL了,导致在AddNode_R函数中将pr指针移动链表尾的操作导致错误。

在这里先谢谢各位了.

//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

const int OK = 1;
const int ERROR = 0;

typedef struct LNode
{
    int data;
    struct LNode *next;
}LinkList;

int InitList(LinkList *head);
int AddNode_R(LinkList *head);


int main()
{
    LinkList *L;
    InitList(L);
    printf("--------------------------------------\n");
    while(1)
    {
        printf("是否申请新的节点(y/n):");
        if(getchar()=='y')
        {
            AddNode_R(L);
        }
        if(getchar()=='n')
        {

        }
    }
    system("pause");
    return 0;
}

int InitList(LinkList *head)
{
    head = (LinkList *)malloc(sizeof(LinkList)); //生成新的节点作为头结点,用头指针Head作为头结点
    if (head == NULL)
    {
        printf("没有足够的内存!\n");
        exit(1);
    }
    head->next = NULL; //防止指针乱指
    return OK;
}

int AddNode_R(LinkList *head) //后插添加节点,每次插入一个节点
{
    LinkList *pr = head; //移动节点
    LinkList *p = NULL;  //新指针

    p = (LinkList *)malloc(sizeof(LinkList)); //新节点,为了防止错误(下一步),要与定义部分分开,

    if (p == NULL) //防止错误
    {
        printf("没有足够的内存\n");
        exit(0);
    }
    p->next = NULL; //防止错误

    //此处出错,为什么在上一个函数退出回到main,head-next会增加1个位置尾0x01,明明在InitList最后将head-next赋值为NULL

    while (pr->next != NULL) //移动指针到尾部
    {
        pr = pr->next;
    }
    pr->next = p; //新节点连接在尾节点之后

    //数据输入区域(可修改)
    int data;
    printf("请输入节点数据(int):");
    scanf("%d", &data);

    p->next = NULL; //防止出错
    return OK;
}
  • 写回答

2条回答 默认 最新

  • qq_34811973 2019-04-08 11:09
    关注

    int InitList(LinkList **head)
    {//必须是二级指针,和传值传地址那个一个道理,只不过这里是指针而已
    *head = (LinkList *)malloc(sizeof(LinkList)); //生成新的节点作为头结点,用头指针Head作为头结点
    if (*head == NULL)
    {
    printf("没有足够的内存!\n");
    exit(1);
    }
    (*head)->next = NULL; //防止指针乱指
    return OK;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题