请编写一个函数int list_revert(SLIST_S *listA, SLIST_S *listB),将传入的单向链表listA反转后返回listB
时间: 2023-08-28 17:03:45 浏览: 136
好的,这是一个使用递归的单向链表反转算法:
```
#include <stdio.h>
typedef struct SLIST {
int data;
struct SLIST *next;
} SLIST_S;
SLIST_S *list_revert(SLIST_S *curr, SLIST_S *prev, SLIST_S *listB) {
if (curr == NULL) {
listB = prev;
return listB;
}
SLIST_S *next = curr->next;
curr->next = prev;
prev = curr;
return list_revert(next, prev, listB);
}
int main() {
SLIST_S *listA = (SLIST_S *)malloc(sizeof(SLIST_S));
SLIST_S *listB = NULL;
listA->data = 1;
listA->next = (SLIST_S *)malloc(sizeof(SLIST_S));
listA->next->data = 2;
listA->next->next = (SLIST_S *)malloc(sizeof(SLIST_S));
listA->next->next->data = 3;
listA->next->next->next = NULL;
listB = list_revert(listA, NULL, listB);
while (listB != NULL) {
printf("%d ", listB->data);
listB = listB->next;
}
return 0;
}
```
函数接收三个参数:当前要反转的节点`curr`、反转后的上一个节点`prev`和用来存储反转后单向链表的指针`listB`。函数返回反转后的单向链表`listB`。函数使用递归的方式依次将链表中的节点反转。最后返回反转后的单向链表`listB`。
阅读全文