c - 一些指针运算

标签 c pointers linked-list

如果我们有这样的结构(链表的一个节点):

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

我们有 2 个指针(a 和 b),这样

a->next = b;

如何交换两个指针 a 和 b(以便 a->next = b->nextb->next = a)?我试过这样的事情:

  a->next = b->next;
  b->next = a;

但它似乎不起作用...这段代码片段有什么问题? a->next 最终会指向它自己吗?通过这样做 a->next = b->next 我们是否让 a->next 指向 b->next 指向的任何东西,还是我们让它指向 b->next 在赋值时指向的地方?

伙计,指针令人困惑。感谢任何帮助!

最佳答案

像这样可视化你正在尝试做的事情:

   A           B           C
| data |    | data |    | data |
| next | -> | next | -> | next | -> NULL

This is your initial state. Let's step through your code and see if it results in what you're trying to achieve. First, you have this:

a->next = b->next;

执行此语句后,您将拥有:

   A           C
| data |    | data |
| next | -> | next | -> NULL

   B           C
| data |    | data |
| next | -> | next | -> NULL

The next statement is this:

b->next = a;

执行此语句后,您将得到以下结果:

   B           A           C
| data |    | data |    | data |
| next | -> | next | -> | next | -> NULL

您已经达到了预期的结果。你的逻辑是正确的。

关于c - 一些指针运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21220240/

相关文章:

c - 静态值存储在程序集中的什么位置

c++ - 如何在内存中的位图上绘制文字[无MFC]

在 C 中将二维数组中的单个元素复制并比较到另一个数组

c++ - 如何在 main 中调用包含对节点的引用的函数

c - C中有没有一种方法可以指向一个指针数组,每个指针都指向不同的数据类型?

java - 读取 .csv 文件并存储到 Java 中的链表

c - C 中的链表与 fgets()

c - 奇怪的指针问题

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?

java - LinkedList,队列与列表的区别