反转链表

2019-09-28  本文已影响0人  ios周周

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

}

上一篇 下一篇

猜你喜欢

热点阅读