fightFor复试-day0304-链表转置-递归&非递归实现

 

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;

struct LinkListNode{
    int data;
    LinkListNode* next;
};

//InsertFromHead
void InsertNode(LinkListNode** HeadRef,int insertData){
    LinkListNode* newNode = (LinkListNode*)malloc(sizeof(LinkListNode));
    newNode->data = insertData;
    newNode->next = *HeadRef;
    *HeadRef = newNode;
}

void PrintLinkList(LinkListNode * ListHead){
    while(ListHead!=NULL){
        cout<<ListHead->data<<" ";
        ListHead = ListHead->next;
    }
    cout<<endl;
}

//non-recursive
void ReverseLinkList(LinkListNode** HeadRef){
    LinkListNode* Pre = NULL;
    LinkListNode* Cur = *HeadRef;
    LinkListNode* Nex = NULL;
    while(Cur!=NULL){
        Nex = Cur->next;
        Cur->next = Pre;
        Pre = Cur;
        Cur = Nex;
    }
    *HeadRef = Pre;
}

//recursive
LinkListNode* ReverseLinkList(LinkListNode* Head){
    if(Head==NULL||Head->next==NULL)
        return Head;
    LinkListNode* newHead = ReverseLinkList(Head->next);
    Head->next->next=Head;
    Head->next = NULL;
    return newHead;
}

int main(){
    LinkListNode* listHead = NULL;
    for(int i=0; i<10; i++){
        InsertNode(&listHead,i);
    }
    PrintLinkList(listHead);
    ReverseLinkList(&listHead);
    PrintLinkList(listHead);
    listHead = ReverseLinkList(listHead);
    PrintLinkList(listHead);
    return 0;
}

  

 

posted @ 2017-03-04 22:06  _SunDaSheng  阅读(200)  评论(0编辑  收藏  举报