思路图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;
}