c语言中用指针交换两个节点所需代码
时间: 2024-12-19 14:15:44 浏览: 11
关于c语言链表的学习总结
在C语言中,我们可以使用指针来交换两个变量的值,同样适用于交换两个链表节点的值。这里是一个简单的示例,假设我们有两个结构体`Node`,每个包含一个数据成员`data`和一个指向下一个节点的指针`next`:
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void swapNodes(Node** a, Node** b) {
// 临时存储a的值
Node* temp = *a;
// a指向b的值
*a = *b;
// b指向temp的值
*b = temp;
}
// 示例如何创建并交换节点
void main() {
Node* node1 = malloc(sizeof(Node));
node1->data = 5;
node1->next = NULL;
Node* node2 = malloc(sizeof(Node));
node2->data = 10;
node2->next = NULL;
printf("Before swap:\n");
printf("node1: %d -> ", node1->data);
if (node1->next != NULL)
printf("(%p)\n", node1->next);
else
printf("(NULL)\n");
printf("node2: %d -> ", node2->data);
if (node2->next != NULL)
printf("(%p)\n", node2->next);
else
printf("(NULL)\n");
swapNodes(&node1, &node2);
printf("\nAfter swap:\n");
printf("node1: %d -> ", node1->data);
if (node1->next != NULL)
printf("(%p)\n", node1->next);
else
printf("(NULL)\n");
printf("node2: %d -> ", node2->data);
if (node2->next != NULL)
printf("(%p)\n", node2->next);
else
printf("(NULL)\n");
}
```
在这个`swapNodes`函数里,我们首先用一个临时指针`temp`保存`a`所指向的节点,然后让`a`指向`b`,最后让`b`指向`temp`。这样就完成了两个节点值的交换。
阅读全文