[英]Editing a node in a Linked list
我正在创建一个学生列表(链表),可以添加,查看和编辑学生信息。 我有两个字段,即学生姓名和学生成绩,我在列表中添加新学生,按照学生的成绩按降序排序。
我已经完成了添加和查看部分。 问题出现在编辑部分,因为我需要编辑信息,然后我需要再次对它进行排序,以便它位于列表的正确位置。
例如,我根据他们的成绩安排了3个学生信息:
student1 90 -> student2 85 -> student3 80 -> NULL
然后我需要将student2的成绩编辑为75,因此编辑后的链表现在应按如下方式排列:
student1 90 -> student3 80 -> student2 75 -> NULL
我该怎么办? 你不需要给我任何代码。 我只是想知道如何实现我的程序的编辑部分。 我正在考虑创建一个新节点(使用已编辑的信息),删除旧节点并将编辑后的节点插入列表中。 我的逻辑是否正确? 或者有更好的方法来解决我的问题。
你可以通过实现目标
单链表?
找到要编辑的节点,并保留指向上一个节点的指针或编写例程以检索上一个节点。
从链表中删除节点(通过设置previous_node-> thisOne-> next旁边)
进行编辑。
将新节点插入列表中的正确位置(通过遍历列表,下一个节点小于编辑值。
拼接编辑到列表中(editedNode-> next = nextNode; current-> next = editedNode)
使用双向链表,您只需使用“其他”/后退/上行链接即可找到上一个节点
基本上你的想法是正确的,除了我不会创建一个新节点。 我会做的是:
请注意,将列表索引到数组等可能会比线性遍历更快地进行搜索。 如果您已经有这样的机制,则在找到重新插入节点的位置时可能会更快地使用它。
您可以执行编辑指定节点的功能。 扫描列表,直到找到该节点,然后直接编辑它。 当然你会使用指针。 对于排序部分,假设您有n个节点,将每个节点i与其后的节点进行比较,如果您要比较的节点更大,则交换它们:
for every node n1 in list
for every remaining node n2 in list
if n2->grade > n1->grade
swap 'em
你可以交换他们复制他们的内存,所以你不需要改变任何指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.