#include<iostream>
using namespace std;
class Node{
public:
Node* next;
int key;
Node(int k):key(k){
next = NULL;
}
};
class List{
public:
Node* head;
int num;
List(int n):num(n){
head = new Node(100);
}
void insert(Node* pn){
if(head->next == NULL){
head->next = pn;
}else{
Node* tmp = head;
Node* pre = head;
while(tmp!=NULL){
pre = tmp;
tmp = tmp->next;
}
pre->next = pn;
}
}
//非递归 start
Node* reserve(Node* head){
if(head->next == NULL){
return head;
}
Node *p=NULL,*q = head->next,*t;
while(q!=NULL){
t = q->next;
q->next = p;
p = q;
q = t;
}
head->next = p;
return head;
}
//end
//递归:start
Node* reserve_sub(Node* list){
if(list==NULL||list->next==NULL)
return list;
Node* p = reserve_sub(list->next);
list->next->next = list;
return p;
}
Node* reserve_start(Node* ptr){
Node* head = ptr;
Node* p = reserve_sub(ptr);
head->next = NULL;
return p;
}
//end
void print(Node* phead){
Node* tmp = phead;
while(tmp!=NULL){
cout<<tmp->key<<"->";
tmp = tmp->next;
}
cout<<endl;
}
};
int main(){
Node* p1 = new Node(1);
Node* p2 = new Node(2);
Node* p3 = new Node(3);
Node* p4 = new Node(4);
Node* p5 = new Node(5);
List *pl = new List(5);
pl->insert(p1);
pl->insert(p2);
pl->insert(p3);
pl->insert(p4);
pl->insert(p5);
pl->print(pl->head);
cout<<"--------1---------"<<endl;
// Node* phead1 = pl->reserve(pl->head);
// pl->print(phead1);
cout<<"--------2------"<<endl;
Node* phead1 = pl->reserve_start(pl->head);
pl->print(phead1);
return 0;
}
单链表转置
最新推荐文章于 2021-06-23 23:54:45 发布