链表
参考程序:
#include<bits/stdc++.h>
using namespace std;
struct Node{
int data;
Node* next;
Node(){
next=NULL;
}
Node(int data):data(data){
next=NULL;
}
};
void insert(Node * head,int data){
Node * p = head;
while(p->next)p=p->next;
Node *newNode = new Node(data);
p->next = newNode;
}
void output(Node * head){
Node *p = head->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void transfer(Node*head){
Node*middle=head->next;
Node*p = head->next;
while(p&&p->next){
p=p->next->next;
middle = middle->next;
}//找到链表的中间节点
// cout<<"middle->data="<<middle->data<<"\n";
p = NULL;
Node *tmp ;
while(middle){
tmp = middle->next;
middle->next = p;
p = middle;
middle = tmp;
}//翻转中间节点后面的节点
middle = p;
p = head->next;
tmp = head;
while(p!=middle&&middle){
tmp->next=p;
tmp=tmp->next;
p=p->next;
tmp->next=middle;
tmp=tmp->next;
middle=middle->next;
}
}
int main(){
Node * head = new Node();//head 用来指向链表的头部
for(int i=0;i<9;++i)insert(head,i);//输出1 测试奇数个
//for(int i=0;i<10;++i)insert(head,i);//输出2 测试偶数个
output(head);
transfer(head);
output(head);
}
输出