编辑链接列表中的节点

我正在创建一个学生列表(链表),可以添加,查看和编辑学生信息。 我有两个字段,即学生姓名和学生成绩,我在列表中添加新学生,按照学生的成绩按降序排序。

我已经完成了添加和查看部分。 问题出现在编辑部分,因为我需要编辑信息,然后我需要再次对它进行排序,以便它位于列表的正确位置。

例如,我根据他们的成绩安排了3个学生信息:

student1 90 -> student2 85 -> student3 80 -> NULL 

然后我需要将student2的成绩编辑为75,因此编辑的链接列表现在应该按如下方式排列:

 student1 90 -> student3 80 -> student2 75 -> NULL 

我该怎么做? 你不需要给我任何代码。 我只是想了解如何实现程序的编辑部分。 我正在考虑创建一个新节点(使用已编辑的信息),删除旧节点并将编辑后的节点插入列表中。 我的逻辑是否正确? 或者有更好的方法来解决我的问题。

基本上你的想法是正确的,除了我不会创建一个新的节点。 我会做的是:

  1. 确定值是增加还是减少(并更新节点)。
  2. 从列表中取消链接节点。
  3. 搜索向前或向后(取决于成绩的增加或减少)以获得正确的位置。
  4. 将节点链接到新位置。

请注意,将列表索引到数组等可能会提供比线性遍历更快的搜索。 如果您已经有这样的机制,则在找到重新插入节点的位置时可能会更快地使用它。

你可以通过实现目标

  • 删除目标节点
  • 编辑目标节点数据
  • 使用现有逻辑重新插入节点以插入节点。

单链表?

找到要编辑的节点,并保留指向上一个节点的指针或编写例程以检索上一个节点。

从链表中删除节点(通过设置previous_node-> thisOne-> next旁边)

进行编辑。

将新节点插入列表中的正确位置(通过遍历列表,下一个节点小于编辑值。

拼接编辑到列表中(editedNode-> next = nextNode; current-> next = editedNode)

使用双向链表,您只需使用“其他”/后退/上行链接即可找到上一个节点

您可以执行编辑指定节点的function。 扫描列表,直到找到该节点,然后直接编辑它。 当然你会使用指针。 对于排序部分,假设您有n个节点,将每个节点i与其后的节点进行比较,如果您要比较的节点更大,则交换它们:

 for every node n1 in list for every remaining node n2 in list if n2->grade > n1->grade swap 'em 

你可以交换他们复制他们的内存,所以你不需要改变任何指针。