请编写一个函数int list_revert(SLIST_S *listA, SLIST_S *listB),将传入的单向链表listA反转后返回listB,其中SLIST_S定义如下: typedef struct SLIST{ …… struct SIG_LIST *next; }SLIST_S;
时间: 2024-03-25 21:39:11 浏览: 48
List-LinkedList 单链表就地反转
4星 · 用户满意度95%
好的,我可以为您编写这个函数。这是一个使用迭代的单向链表反转算法:
```
#include <stdio.h>
typedef struct SLIST {
int data;
struct SLIST *next;
} SLIST_S;
SLIST_S *list_revert(SLIST_S *listA, SLIST_S *listB) {
SLIST_S *prev = NULL;
SLIST_S *curr = listA;
SLIST_S *next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
listB = prev;
return 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, listB);
while (listB != NULL) {
printf("%d ", listB->data);
listB = listB->next;
}
return 0;
}
```
函数接收两个参数:要反转的单向链表`listA`和用来存储反转后单向链表的指针`listB`。函数返回反转后的单向链表`listB`。函数使用迭代的方式依次将链表中的节点反转。最后返回反转后的单向链表`listB`。
阅读全文