建了一个单项链表环...如何将此链表的环反向旋转啊?有答案立即结贴.

zhiang75 2006-06-08 03:45:49
建了一个链表环...如何将此链表的环反向旋转啊?
结构
struct mr_node
{
int data;
mr_node *next;
};

代码:
mr_node *p1=NULL;

mr_node *p2=NULL;

mr_node *p3=NULL;



p1=(mr_node *)(malloc(sizeof(mr_node)));

p1->data=0;

p2=p1;

p3=p1;

for(int a=1;a<20;a++)

{

p1=(mr_node *)(malloc(sizeof(mr_node)));

p1->data=a;

p2->next=p1;

p2=p1;

}

p1->next=p3;



mr_node mr_array1[20];



int a=0;

p2=p3;

do

{

mr_array1[a]=*p2;



a++;

p2=p2->next;

}while(p2!=p3);





for(int a=0;a<19;a++)

{

mr_array1[a].next=&mr_array1[a-1];

}

mr_array1[19].next=&mr_array1[0];







p2=p3;

do

{ p1=p2;

p2=p2->next;

free(p1);

}while(p2!=p3);

}

不对,请指点.谢谢.


...全文
178 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tailzhou 2006-06-08
  • 打赏
  • 举报
回复

#include <iostream>

struct mr_node
{
int data;
mr_node *next;
};

mr_node *p1=NULL;
mr_node *p2=NULL;
mr_node *p3=NULL;

void converse(mr_node *p)
{
mr_node *pa=p->next;
if (pa->next==NULL)
{
pa->next=p;
return;
}
p->next=NULL;
converse(pa);
pa->next=p;
}

int main()
{


p1=(mr_node *)(malloc(sizeof(mr_node)));
p1->data=0;
p2=p1;
p3=p1;
for(int a=1;a<20;a++)
{
p1=(mr_node *)(malloc(sizeof(mr_node)));
p1->data=a;
p2->next=p1;
p2=p1;
}
p1->next=p3;

p1=p3;
p2=p1;
while(p1->next!=p3)
{
p1=p1->next;
printf("->%d",p1->data);
}

printf("\n");

converse(p1);

p1=p3;
p2=p1;
while(true)
{
p1=p1->next;
printf("->%d",p1->data);
}
}
zjx95 2006-06-08
  • 打赏
  • 举报
回复
void Reverse(mr_node *pCircle)
{
mr_node *p1, *p2, *p3;

p1 = pCircle;
p2 = p1->pNext;
p3 = p2->pNext;
while (1)
{
p2->pNext = p1;

p1 = p2;
p2 = p3;
p3 = p3->pNext;

if (p1 == pCircle)
{
break;
}
}
}
sharpdew 2006-06-08
  • 打赏
  • 举报
回复
// 下面的代码满足你的要求
struct mr_node
{
int data;
mr_node *next;
};

int main()
{
mr_node *p1=NULL;
mr_node *p2=NULL;
mr_node *p3=NULL;

// create a cyclic list
p1=(mr_node *)(malloc(sizeof(mr_node)));
p1->data=0;
p2=p1;
p3=p1;
for(int a=1;a<20;a++)
{
p3 = (mr_node *)(malloc(sizeof(mr_node)));
p3->data = a;
p2->next = p3;
p2 = p3;
}
p2->next = p1;

// print the list
p3 = p1->next;
while(p3 && p3 != p1)
{
cout << p3->data << " ";
p3 = p3->next;
}
cout << endl;

// reverse the cyclic list
p3 = p1->next;
p2 = p1;
while(p3 && p3 != p1)
{
mr_node* tmp = p3->next;
p3->next = p2;
p2 = p3;
p3 = tmp;
}
p1->next = p2;

// print the reversed list
p3 = p1->next;
while(p3 && p3 != p1)
{
cout << p3->data << " ";
p3 = p3->next;
}
cout << endl;



return 0;
}

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧