Programming 板


LINE

大家好,最近在实作linked list 最下面是程式的节录 AddAtHead是想将node新增在linked list的开头 在AddAtHead中的注解是compile会过答案正确的程式,它的下面三行是我有问题的部分 它们的错误输出范例是如果我有一个linked list是2->7,想在前面加一个1的node 此时会变成1->7而不是1->2->7 印(obj->val,obj->next->val)和(tem->val,tem->next->val)出来都是(1,7) 我一开始想将obj指向linkedlist的头所以用obj=tem; 我以为的错误会是obj和tem变成回圈的linked list或是都变成1->2,结果是1->7,百思 不得其解 所以想问大家知道这个运算obj=tem;中发生了什麽事? 为什麽只要像注解一样避开obj=tem;就可以? 谢谢大家 typedef struct linklist{ int val; struct linklist *next; } MyLinkedList; void AddAtHead(MyLinkedList* obj, int val) { MyLinkedList* tem = malloc(sizeof(MyLinkedList)); // tem->val=obj->val; // tem->next=obj->next; // obj->val=val; // obj->next=tem; tem->val=val; tem->next=obj; obj=tem; } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.9.131.1 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1736755011.A.775.html
1F:→ ssdoz2sk: 嗯,我觉得你需要画图帮助理解61.220.35.86 01/13 16:52
有画过,但我的问题应该是不知道那行运算实际做了什麽?以及为什麽会输出那样? ※ 编辑: vhunter (101.9.131.1 台湾), 01/13/2025 18:30:52
2F:推 gusion: 你注解做的事情实际上是把新建的node放在110.28.40.242 01/13 21:15
3F:→ gusion: 第二个,把值改成原本的头,把原本头的值110.28.40.242 01/13 21:15
4F:→ gusion: 改成新值。而你想直接加到开头的话,就应110.28.40.242 01/13 21:15
5F:→ gusion: 该传入pointer of pointer,把原本caller110.28.40.242 01/13 21:15
6F:→ gusion: 拥有的obj pointer改成新建的node。110.28.40.242 01/13 21:15
是,我注解这样写可以过,因为我需要obj最後指向第一元素,我也理解中间的过程。我 只是不知道没有注解的部分错在哪里?和不了解中间的机制 ※ 编辑: vhunter (101.9.131.1 台湾), 01/13/2025 21:27:02
7F:推 gusion: obj变数指到的是head node,function call110.28.40.242 01/13 21:27
8F:→ gusion: er也应该有一个pointer指到head node,这110.28.40.242 01/13 21:27
9F:→ gusion: 边先假设叫headptr,而你在function中只能110.28.40.242 01/13 21:27
10F:→ gusion: 透过obj修改head node,无法影响到外面的h110.28.40.242 01/13 21:27
11F:→ gusion: eadptr,如果要修改headptr,就应该传一个110.28.40.242 01/13 21:27
12F:→ gusion: 指到headptr的pointer,把headptr改成指向110.28.40.242 01/13 21:27
13F:→ gusion: tem。110.28.40.242 01/13 21:27
应该不是,没有注解的部分我在leetcode练习上编译之後是正确的,中间我有印出来看也 是对的。因为传递的是指标结构,我想应该是call by address ,在function中的修改应 该会直接反应在global。问题感觉不在这里? ※ 编辑: vhunter (101.9.131.1 台湾), 01/13/2025 23:28:40
14F:→ lycantrope: 换成rust就是 mut obj:&mut Node 133.106.32.178 01/14 00:00
15F:推 gusion: 有比较完整的程式码吗?我拿你的function 1.169.110.73 01/14 00:36
16F:→ gusion: 测试,跑不出你的结果。 1.169.110.73 01/14 00:37
17F:→ gusion: https://onecompiler.com/c/435xysdfs 1.169.110.73 01/14 00:39
这是leetcode的题目,它的主程式没有放出来,我也只是写function出来而已,题 目是leetcode的707.Design Linked List 如果主程式我自己写的话是这样 https://onecompiler.com/c/435zq7nr9 结果和内文的错误一样
18F:推 ssdoz2sk: 欸,我拿便利贴模拟一下应该不会这样啊27.53.99.6 01/14 13:07
19F:→ ssdoz2sk: ,7 的item 也没被重新分配,奇怪了 27.53.99.6 01/14 13:07
不知道,我也觉得很奇怪QQ ※ 编辑: vhunter (101.9.131.1 台湾), 01/14/2025 14:02:50 ※ 编辑: vhunter (101.9.131.1 台湾), 01/14/2025 14:26:14 ※ 编辑: vhunter (101.9.131.1 台湾), 01/14/2025 14:31:32 ※ 编辑: vhunter (101.9.131.1 台湾), 01/14/2025 14:35:03
20F:推 gusion: 你的main funtion的obj变数一直都是指在71.169.110.73 01/14 19:44
21F:→ gusion: 的那个node,只是因为你是在add function1.169.110.73 01/14 19:44
22F:→ gusion: 中印list,所以才会好像有加进list的错觉1.169.110.73 01/14 19:44
23F:→ gusion: ,实际上在main的obj看到的一直只有一个no1.169.110.73 01/14 19:44
24F:→ gusion: de,也就是一开始create的node。第一次加 1.169.110.73 01/14 19:44
25F:→ gusion: 入7会成功,是因为add function是把第一个1.169.110.73 01/14 19:44
26F:→ gusion: node的value改成7,後面的add对main来说是1.169.110.73 01/14 19:44
27F:→ gusion: 无作用的 1.169.110.73 01/14 19:44
我试过几次之後发现tem MyLinkedList* tem = (MyLinkedList* )malloc(sizeof(MyLinkedList)); 改成 MyLinkedList* tem; 这样就好的话就可以正常移动指标,因为我只需要一个指向node的指标就好而不是需要一个node 如果需要新增node则是不能移动obj,所以leetcode上很多答案都是obj指向next是第一元素head,而不是让obj直接当head 应该是这样,感谢大家的回答!! ※ 编辑: vhunter (101.9.131.1 台湾), 01/15/2025 00:32:59







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP