法1 采用头插的方法解题,最后返回新的头。
struct ListNode* reverseList(struct ListNode* head) { struct ListNode* newhead = NULL; struct ListNode* cur = head; while(cur) { struct ListNode* next = cur->next; //记录下一个 cur->next = newhead; newhead = cur; cur = next; } return newhead; }
法 2 改变指向,原来是从前向后,改之后从后向前。
struct ListNode* reverseList(struct ListNode* head) { if(head == NULL) { return NULL; } struct ListNode* n1,*n2,*n3; n1 = NULL; n2 = head; n3 = n2->next; while(n2) { //倒指向 n2->next = n1; n1 = n2; n2 = n3; if(n3) { n3 = n3->next; } } return n1; }