编辑链接列表中的节点

时间:2010-12-09 14:17:17

标签: c linked-list editing

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

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

例如,我根据成绩排列了3个学生信息:

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

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

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

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

4 个答案:

答案 0 :(得分:3)

您可以通过

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

答案 1 :(得分:3)

单链表?

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

从链接列表中删除您的节点(通过在nextOne-> gt旁边设置previous_node->)

进行修改。

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

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

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

答案 2 :(得分:2)

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

  1. 确定值是增加还是减少(并更新节点)。
  2. 从列表中取消链接节点。
  3. 向前或向后搜索(取决于成绩的增加或减少)以获得正确的位置。
  4. 将节点链接到新位置。
  5. 请注意,将列表索引到数组等可能会比线性遍历更快地进行搜索。如果您已经有这样的机制,那么在找到重新插入节点的位置时可能会更快地使用它。

答案 3 :(得分:1)

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

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

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