实验11-2-9 链表逆置 (20分) 本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *reverse( struct ListNode *head ); 其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> struct ListNode { int data; struct ListNode *next; }; struct ListNode *createlist(); /*裁判实现,细节不表*/ struct ListNode *reverse( struct ListNode *head ); void printlist( struct ListNode *head ) { struct ListNode *p = head; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { struct ListNode *head; head = createlist(); head = reverse(head); printlist(head); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 1 2 3 4 5 6 -1 输出样例: 6 5 4 3 2 1 struct ListNode *reverse( struct ListNode *head ) { struct ListNode *p = NULL,*p1 = NULL; while(head != NULL) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p -> data = head -> data; p -> next = p1; p1 = p; head = head -> next; } return p; }