#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;
}
#include<iostream>
#include<ctime>
using namespace std;
struct LIST
{
int a;
LIST* back;
};
int main()
{
clock_t start, finish;
double duration;
//------------------记时开始,测量一个事件持续的时间(包含输入的时间,具体可以自己调整)
start = clock(); //可以调整开始的位置
int n;
scanf("%d",&n);//输入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();
//---------------------------------------记时结束
finish=clock(); //可以调整结束的位置
duration=(double)(finish-start) / CLOCKS_PER_SEC;
//duration=finish-start;
cout<<"持续时间为"<<duration<<" seconds!"<<endl;
system("pause");
return 0;
}