#include <iostream>
using namespace std;
/*
链表翻转。给出一个链表和一个数k,比如,链表为1→2→3→4→5→6,k=2,则翻转后2→1→6→5→4→3,
若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现。
*/
struct LinkList
{
int data;
LinkList* next;
LinkList(int i=0){data=i; next=NULL;}
};
void print_list(LinkList* head){
LinkList* p = head;
while(p){
cout<<p->data<<' ';
p = p->next;
}
cout<<endl;
}
LinkList* reverse(LinkList* head, int k){
if(head == NULL)
{
return NULL;
}
int i = k;
LinkList* end = head;
int length = 1;
while(--i)
{
if(end->next==NULL){
k = length;
break;
}
else{
end = end->next;
length += 1;
}
}
i = k;
LinkList* save = end->next;
LinkList* p1 = head;
LinkList* p2 = head->next;
while(--i)
{
LinkList* temp = p2->next;
p2->next = p1;
p1 = p2;
p2 = temp;
}
head->next = reverse(save, k);
return end;
}
int main(){
LinkList* n1 = new LinkList(1);
LinkList* p = n1;
for(int i=2; i<12; i++)
{
LinkList* temp = new LinkList(i);
p->next = temp;
p = p->next;
}
print_list(n1);
LinkList* a = reverse(n1, 4);
print_list(a);
}
没有评论:
发表评论