法一:迭代
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
if(head==NULL||head->next==NULL){
return head;
}
struct ListNode*n1=NULL,*n2=head,*n3=head->next;
while(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) {
struct ListNode*newHead=NULL;
struct ListNode*cur=head;
while(cur){
struct ListNode*next=cur->next;
//头插
cur->next=newHead;
newHead=cur;
cur=next;
}
return newHead;
}