#include#include struct ListNode { int val; struct ListNode *next; }; struct ListNode* init(int val){ struct ListNode* head = malloc(sizeof(struct ListNode)); head->next = NULL; head->val = val; return head; } void insert(struct ListNode* head, int val){ struct ListNode* p = head; while(p->next){ p = p->next; } struct ListNode* node = malloc(sizeof(struct ListNode)); node->next = NULL; node->val = val; p->next = node; } void print(struct ListNode* head){ struct ListNode* p = head; while(p){ printf("%d ", p->val); p = p->next; } } struct ListNode* reverseList(struct ListNode* head){ if (head == NULL){ return head; } struct ListNode* p = head; struct ListNode* pre = head; if (pre->next== NULL){ return pre; } struct ListNode* cur = pre->next; if (cur->next == NULL){ cur->next = pre; pre->next = NULL; return cur; } struct ListNode* next = cur->next; pre->next = NULL; cur->next = pre; while(next->next){ pre = cur; cur = next; next = next->next; cur->next = pre; } next->next = cur; return next; } int main() { struct ListNode* head = init(1); insert(head,2); insert(head,3); insert(head,4); insert(head,5); insert(head,6); insert(head,7); insert(head,8); insert(head,9); insert(head,10); print(head); printf("n"); struct ListNode* re = reverseList(head); print(re); return 0; }



