思路:将原链表看成两部分,一个部分表示完成旋转的;一个部分表示未完成旋转的。分别通过两个指针desHead和resHead指向两个链表,在一次函数递归中需要完成的是将未完旋转链表的头指针 P 中的next指针指向已完成旋转队列的头结点Q.并将P添加到已完成队列,从未完成队列中移除P,该表Q当前的指向,使得Q指向新加入的结点P。一下是代码实现。
#include<stdio.h>
struct Node
{
int data;
Node*next;
};
void RevertList(Node*resHead,Node*&desHead)
{
if(resHead==NULL)
{
return ;
}
Node*temp=resHead->next;
if(desHead==NULL)
{
desHead=resHead;
desHead->next=NULL;
}
else
{
resHead->next=desHead;
desHead=resHead;
}
RevertList(temp,desHead);
}
void PrintList(Node*head)
{
while (head)
{
printf("%d ",head->data);
head=head->next;
}
printf("\n");
}
int main()
{
Node*head=new Node;
head->data=0;
Node*assistHead=head;
for(int i=1;i<11;i++)
{
Node*temp=new Node;
temp->data=i;
assistHead->next=temp;
assistHead=temp;
}
assistHead->next=NULL;
PrintList(head);
assistHead=NULL;
RevertList(head,assistHead);
PrintList(assistHead);
}