鏈表
參考程序:
#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);
}
輸出