【问题标题】:Cannot swap values of nodes无法交换节点的值
【发布时间】:2013-02-23 22:40:36
【问题描述】:

我正在尝试交换节点值。没有编译错误。我正在使用 Visual Basic 进行编程。如果有人能指出我哪里出错了。会有很大的帮助。

另外,我可以在我的代码中添加什么,所以交换任何值,无论是 char 还是 int。

#include <stdio.h>
#include <stdlib.h>


struct lnode {
    int data;
    struct lnode* next;
};

void swapNodes(struct lnode* n1, struct lnode* n2);

int main()
{
    struct lnode nodeA, nodeB;
    nodeA.data = 1;
    nodeB.data = 2;

    swapNodes(&nodeA, &nodeB);
    getchar();
    return 0;
}

void swapNodes(struct lnode* n1, struct lnode* n2)
{
    struct lnode* temp;
    temp = n1->next;
    n1->next = n2;
    n2->next = temp;
    printf("nodeA= %d  nodeB= %d",n1->data,n2->data);
}

【问题讨论】:

  • 这实际上是今天关于 pass-by-value 与 pass-by-pointer 的第 5 个问题。提示:您需要取消引用 swap() 中的指针。
  • 您正在使用 Visual Basic 进行 C++ 编程?这是如何运作的?或者您的意思是您正在使用 Visual Studio?此外,如果您使用的是 Visual Studio,您应该学习如何使用调试器。它会很快让你发现问题出现在哪里,然后你可以找到解决问题的方法。
  • 是的,我想说工作室不是基本的哈哈,抱歉。

标签: c


【解决方案1】:

在 swapNodes() 函数中,您不应将 n1->next 分配给 temp; n1->next 什么都没有。

temp = n1->next;
n1->next = n2;
n2->next = temp;

应该是

temp = n1;
n1 = n2;
n2 = temp;


lnode->next 对交换两个节点没有任何作用。

【讨论】:

    【解决方案2】:

    在您的 swapNodes 函数中,您正在交换 next 值,看起来您打算交换数据值,如下所示:

    void swapNodes(struct lnode* n1, struct lnode* n2)
    {
        int temp = n1->data;
        n1->data = n2->data;
        n2->data = temp;
        printf("nodeA= %d  nodeB= %d",n1->data,n2->data);
    }
    

    【讨论】:

    • 如果你做 n1->data,它 dsnt 工作,它给出一个错误,你不能使用 int temp 节点,它的类型不匹配。
    • 我不是为节点做int temp,我是为node-&gt;data做,它们都是整数。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2021-12-18
    • 2017-12-07
    • 2018-11-05
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多