反转单链表

反转单链表_第1张图片
思路图1:
反转单链表_第2张图片
代码:


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(头插法):定义一个新的头指针,然后把链表的节点从第一个开始分别拿下来,头插到新指针处,就实现了链表的逆序
反转单链表_第3张图片
代码:

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;

}

你可能感兴趣的:(数据结构,c语言,链表)