法一:反转指针
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head){ if(head==NULL) return NULL; struct ListNode*n1=NULL;//n1作为返回的头节点 struct ListNode*n2=head; struct ListNode*n3=n2->next;//记录头节点的下一个节点,避免转过去之后找不到后面的节点 while(n2)//n2是反转的主角,所以n2到空才可以,迭代过程 { n2->next=n1; n1=n2; n2=n3; if(n3) n3=n3->next; } return n1; }
法二:头插法
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head){ if(head==NULL) return NULL; struct ListNode*cur=head; struct ListNode*newnode=NULL; struct ListNode*next=cur->next; while(cur) { cur->next=newnode; newnode=cur; cur=next; if(next) next=next->next; } return newnode; }

