本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:
struct ListNode { int data; struct ListNode *next; };
函数接口定义:
struct ListNode *reverse( struct ListNode *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; } /* 你的代码将被嵌在这里 */
模块图
struct ListNode *reverse( struct ListNode *head ) { if(head==NULL) { return head; } else if(head->next==NULL) { return head; } else{ struct ListNode *q=head; struct ListNode *p=head->next; while(p!=NULL) { struct ListNode *r=p->next; p->next=q; q=p; p=r; } head->next=NULL; return q; } }
标签:head,ListNode,struct,next,链表,return,逆置 From: https://www.cnblogs.com/kk4458/p/16785776.html