如图所示,直接用p=0不就好了,为什么又弄个链表,又弄个计数器等于1的,不是麻烦了嘛?
6条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在C++中实现获取链表中第
i
个元素的功能时,确实可以通过不同的方法来实现。这里所展示的两种方式都是为了遍历链表并找到指定位置的元素。不过,它们之间有一些微妙的区别。第一种方法(图1)使用了一个名为
p
的指针和一个名为j
的计数器。这种方法的思路是先将p
指向链表的第一个元素(即头节点的下一个节点),然后通过j
来跟踪当前遍历到的位置。当p
不为NULL且j
小于目标位置i
时,继续移动p
到下一个节点,并增加j
的值。这样做的好处是可以节省空间,因为只需要一个额外的指针p
。但是,这种方法要求输入的索引i
必须是有效的,即0 <= i < 链表长度
,否则可能会导致程序错误,因为它没有检查链表是否足够长以容纳第i
个元素。第二种方法(图2)使用了一个名为
P
的计数器,同时在遍历过程中更新元素内容到e
。这种方法的优点是在遍历时同时更新了结果,因此不需要额外的空间来存储临时的节点指针。然而,这种方法在逻辑上稍微复杂一些,因为它在循环内更新了e
,这可能容易让人误解,以为每次循环都会更新结果。实际上,只有在找到正确位置后才会更新e
。总结一下,这两种方法各有优缺点。第一种方法更简洁,但需要确保输入的索引有效;第二种方法稍微多一点冗余,但它在找到正确位置后立即返回结果。在实际编程中,选择哪种方法取决于具体需求、代码风格和个人偏好。如果你想要一种更加清晰明了的方法,可以考虑将第二个版本稍作修改,使其逻辑更明确:
EStatus GetElem(LinkList L, int Position, ElemType& e) { int P = 0; while (L && P < Position) { L = L->next; P++; } if (!L) { return ERROR; // 第i个元素不存在 } e = L->data; return OK; }
这个版本在找到正确位置之前不会更新
e
,并在找到正确位置后才进行赋值。这样,代码的意图就更加清晰了。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 matlab做ba模型让其在ba和er规则下生长
- ¥50 有偿!centos curl port设置问题
- ¥15 请问Quartus的Verilog代码怎么写?
- ¥100 Mac 版foxmail 收邮件问题
- ¥15 QWebEngineView
- ¥15 如何使用shufflenet进行手写数字识别
- ¥20 微信小程序播放直播流
- ¥15 关于迷宫自走单片机循迹小车的知识
- ¥15 python使用selenium工具爬取网站的问题
- ¥15 visual studio中c语言用ODBC链接SQL SERVER