法一:反转指针
/**
* 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;
}