poj1208(链表

本文介绍了通过链表解决POJ1208问题的过程,探讨了不同平台上的运行时间差异,针对UVA平台超时问题进行了分析。
摘要由CSDN通过智能技术生成

当写链表来练习了。

(好吧,,,在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;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值