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; }