64,648
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
struct LIST
{
int a;
LIST* back;
};
int main()
{
int n;
scanf("%d",&n);
LIST *list=new LIST[n];
for(int i=0;i<n;i++)
{
list[i].a=i+1;//
if(i!=n-1)//
list[i].back=&list[i+1];//
else
list[i].back=&list[0];//
}
LIST *P=&list[n-1];//
for(int k=0;k<n-1;k++)
{
P=P->back->back->back;//
P->back=P->back->back;//
}
printf("%d\n",P->a);
std::cin.get();
std::cin.get();
return 0;
}
#include<iostream>
struct LIST
{
int a;
LIST* back;
};
int main()
{
int n;
scanf("%d",&n);
LIST *list=new LIST[n];//显示开辟了n个LIST结点
for(int i=0;i<n;i++)
{
list[i].a=i+1;//这是为第i个(从0数)LIST结点的数据域a赋值
if(i!=n-1)//出于这个判断是为了形成一个环形链表,在i不等于n-1(也就是不是最后一个)的时候
list[i].back=&list[i+1];//都是把list数组中的后一个元素(这里指的是LIST对象)的地址赋到前一个元素的指针域中,这样子就形成了链接关系
else
list[i].back=&list[0];//如果是最后一个结点的话,那就把第一个结点的地址赋给其指针域,以此形成了一个环形的LIST元素链表
}
//之前是通过赋值语句形成了一个环形链表
LIST *P=&list[n-1];//定义LIST指针,用于指向list数组的最后一个元素
for(int k=0;k<n-1;k++)
{
P=P->back->back->back;//原本指向list数组的最后一个元素,现在将p指向修改,改成了指向后面的第三个,因为他是环形的,所以最后一个元素的后一个就是第0个了
P->back=P->back->back;//然后在对(p->pack,这其实是p所指向的元素的pack域中的值)的指向做一次修改,这次是在上一句的基础上,把pack->back的值修改成p的后面数第二个
}
//以上两句代码,循环执行n-1次,最后输出了p所指向元素中的a值
//这代码应该是在考察链表的组织结构
printf("%d\n",P->a);
std::cin.get();
std::cin.get();
return 0;
}