如果我们有这样的结构(链表的一个节点):
struct Node{
int data;
struct Node* next;
}
我们有 2 个指针(a 和 b),这样
a->next = b;
如何交换两个指针 a 和 b(以便 a->next = b->next
和 b->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/