两两交换链表中的节点用递归C语言
时间: 2023-12-24 21:46:19 浏览: 44
以下是递归实现两两交换链表中的节点的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* swapPairs(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
struct ListNode *newHead = head->next;
head->next = swapPairs(newHead->next);
newHead->next = head;
return newHead;
}
int main() {
struct ListNode *node1 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node2 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node3 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node4 = (struct ListNode*)malloc(sizeof(struct ListNode));
node1->val = 1;
node2->val = 2;
node3->val = 3;
node4->val = 4;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = NULL;
struct ListNode *newHead = swapPairs(node1);
while (newHead != NULL) {
printf("%d ", newHead->val);
newHead = newHead->next;
}
return 0;
}
```
以上代码中,我们定义了一个结构体 `ListNode` 表示链表节点,包含一个整型变量 `val` 和一个指向下一个节点的指针 `next`。函数 `swapPairs` 是递归实现两两交换链表中的节点的函数,它的参数是链表头节点指针 `head`,返回值是交换后的链表头节点指针。如果链表为空或者只有一个节点,直接返回该节点;否则,交换前两个节点,并递归处理剩下的节点。最后返回新的链表头节点指针。
在 `main` 函数中,我们创建了一个包含四个节点的链表,并调用 `swapPairs` 函数对链表进行两两交换。最后输出交换后的链表节点值。