您的位置:首页 > 其它

poj1208(链表

2015-07-30 13:40 323 查看
当写链表来练习了。

(好吧,,,在poj运行16ms。。为什么在uva就是超了3s- -。。。

#include <iostream>
#include <string>
using namespace std;
struct LNode
{
int data;
LNode* fron;
LNode* next;
};
void change(LNode* addr)
{
LNode* last_addr = addr;
while(addr->next != NULL)
{
addr = addr->next;
last_addr->next = NULL;
addr->fron = NULL;
last_addr = addr;
}
}
bool text(LNode* a,LNode* b)
{
LNode* addr = a;
while(addr != NULL)
if(addr->data == b->data)
return true;
else addr = addr->next;
addr = a;
while(addr != NULL)
if(addr->data == b->data)
return true;
else addr = addr->fron;
return false;
}
int main()
{
int num,n1,n2;
LNode nums[30];
string a,b;
cin >> num;
for(int m = 0;m < num;m++)
{
nums[m].data = m;
nums[m].next = NULL;
nums[m].fron = NULL;
}
while(cin >> a && a != "quit" && cin >> n1 >> b >> n2)
if(!text(&nums[n1],&nums[n2]))
{
LNode* addr = nums[n1].fron;
if(addr != NULL)
addr->next = NULL;
if(a == "move")
{
if(b == "onto")
{
change(&nums[n1]);
change(&nums[n2]);
nums[n1].fron = &nums[n2];
nums[n2].next = &nums[n1];
}
else
{
change(&nums[n1]);
LNode* addr = &nums[n2];
while(addr->next != NULL)
addr = addr->next;
addr->next = &nums[n1];
nums[n1].fron = addr;
}
}
else
{
if(b == "onto")
{
change(&nums[n2]);
nums[n2].next = &nums[n1];
nums[n1].fron = &nums[n2];
}
else
{
LNode* addr = &nums[n2];
while(addr->next != NULL)
addr = addr->next;
addr->next = &nums[n1];
nums[n1].fron = &nums[n2];
}
}

}
for(int m = 0;m < num;m++)
{
cout << m << ':';
if(nums[m].fron == NULL)
{
LNode* addr = &nums[m];
while(addr != NULL)
{
cout << ' ' << addr->data;
addr = addr->next;
}
}
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: