在上课的时候想了一下链表的双指针写法
#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出现的次数
还有这两个个方法的实现
c语言链表stack(双指针)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- CSDN专家-cpp_learner 2021-04-01 08:19关注
帮你调试过了,你使用的是头插法,也就是在连边的头部进行插入数据。出现你这种情况,是因为你在mian函数里创建的那个节点没有给data赋值,导致他的值是乱值。如果你在printQueue函数中不希望它输出的话,将while条件改成while (l->next != NULL);
解释:当当前节点的下一个节点等于NULL时,结束循环。也就是说,当节点在最后一个节点那里是,此时的data是乱值,判断他的下一个节点为NULL,然后结束循环。
另外,你所说的那两个节点,你自己去写吧,有问题还可以发出来提问,不能干想着别人给你答案。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料