.T21 2021-04-01 02:13 采纳率: 50%
浏览 43
已采纳

c语言链表stack(双指针)

在上课的时候想了一下链表的双指针写法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node {
int data;
struct node* next;
}Node;

int main() {
struct node *newn = malloc(sizeof(struct node));
newn->next = NULL;
Push(&newn, 3);
Push(&newn, 4);
printQueue(newn);
return 0;
}
void Push(Node**headRef, int newData){
Node *head = *headRef;
struct node *newn = malloc(sizeof(struct node)); 
newn->data = newData;
newn->next = head;
head = newn;
if(head->next->data ==NULL){
return;
}
*headRef = head;
};
void printQueue(Node* l){
while(l != NULL){
printf("data is %d\n", l->data);
l = l->next;
}
printf("\n");
};

但是打印出来的是
data is 4
data is 3
data is 1530256
最后一个是内存,不知道如何去消掉这个内存
如何解决这个问题

int Pop(Node* list);

int Count(Node* head, int a);//a出现的次数
还有这两个个方法的实现

  • 写回答

3条回答 默认 最新

  • CSDN专家-cpp_learner 2021-04-01 08:19
    关注

    帮你调试过了,你使用的是头插法,也就是在连边的头部进行插入数据。出现你这种情况,是因为你在mian函数里创建的那个节点没有给data赋值,导致他的值是乱值。如果你在printQueue函数中不希望它输出的话,将while条件改成while (l->next != NULL);

    解释:当当前节点的下一个节点等于NULL时,结束循环。也就是说,当节点在最后一个节点那里是,此时的data是乱值,判断他的下一个节点为NULL,然后结束循环。

     

    另外,你所说的那两个节点,你自己去写吧,有问题还可以发出来提问,不能干想着别人给你答案。

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料