反转链表

思路1: 新建一个链表,把list每个节点插入在新链表的头部。此新链表即是所求

LNode*reverseLinkList(LinkList list)

{

    if(list==NULL||list->next==NULL) {

        returnlist;

    }

    LNode*node =NULL;

    LNode*temp = list;

    while(temp!=NULL) {

        LNode*current = temp;

        temp = temp->next;


        if(node ==NULL) {

            current->next=NULL;

        }else

        {

            current->next= node;

        }

        node = current;


    }

    printLinkList(node);

    return node;

}


思路二:迭代实现

LNode*reverseByDieDai(LNode*head)

{

    LNode *a = NULL;//a为已完成反转的头指针

    LNode *b = head;//b为未完成反转的链表的首节点指针

    LNode *c = NULL;//c为未完成反转的链表的第二个指针

    while(b!=NULL) {

        c = b->next;

        b->next= a;

        a = b;

        b = c;

    }

    printLinkList(a);

    return a;

}


思路三:递归实现

LNode*reverseLinkListByRe(LNode* head)

{

    if(!head||head->next==NULL) {

        returnhead;

    }

    LNode*current = head;


    LNode*reverse =reverseLinkListByRe(current->next);


    current->next->next= current;

    current->next=NULL;


    return reverse;

}

你可能感兴趣的:(反转链表)