思路图1:
代码:
struct ListNode* reverseList(struct ListNode* head){if(head==NULL)//当head是空链表时
{return head;
}struct ListNode* n1=NULL;struct ListNode* n2=head;struct ListNode* n3=head->next;if(head->next==NULL)//当链表只有一个节点时{return head;}
while(n2)
{n2->next=n1;n1=n2;n2=n3;if(n3==NULL)//当最后一次n3走完后就不会再走了{n3=n3;}else{n3=n3->next;}
}
return n1;
}
思路2(头插法):定义一个新的头指针,然后把链表的节点从第一个开始分别拿下来,头插到新指针处,就实现了链表的逆序
代码:
struct ListNode* reverseList(struct ListNode* head){struct ListNode*cur=head;struct ListNode*newnode=NULL;while(cur){struct ListNode*per=cur->next;//保存下一个节点cur->next=newnode;newnode=cur;cur=per;//移动cur}return newnode;}