双向链表TLE后四个点,有办法优化吗
  • 板块P1160 队列安排
  • 楼主Gril
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/10/16 02:11
  • 上次更新2023/10/27 07:20:22
查看原帖
双向链表TLE后四个点,有办法优化吗
622751
Gril楼主2022/10/16 02:11

代码如图

#include <bits/stdc++.h>
using namespace std;
struct LNode
{
    int data;
    LNode *next;
    LNode *pre;
};
int n = 0;
int main()
{
    LNode* llist = (LNode*)malloc(sizeof(LNode));
    LNode *p = (LNode*)malloc(sizeof(LNode));
    llist->next = p;
    llist->pre = NULL;
    p->next = NULL;
    p->pre = llist;
    p->data = 1;

    cin >> n;
    for(int i = 2;i <= n ;i++)
    {
        LNode *t = llist->next;
        int k = 0,p = 0;
        cin >> k >> p;
        while(t != NULL)
        {
            if(t->data == k)
            {
                LNode *q = (LNode*)malloc(sizeof(LNode));
                q->data = i;
                if(p == 0)
                {
                    q->pre = t->pre;
                    if(t->pre != NULL)
                        t->pre->next = q;
                    q->next = t;
                    t->pre = q;
                }else{
                    q->pre = t;
                    q->next = t->next;
                    if(t->next != NULL)
                        t->next->pre = q;
                    t->next = q;
                }
                break;
            }
            t = t->next;
        }
    }
    int m = 0;
    cin >> m;
    for(int i = 1;i <= m;i++)
    {
        int x = 0;
        cin >> x;
        LNode *t = llist->next;
        while(t != NULL)
        {
            if(t->data == x)
            {
                if(t->pre != NULL)
                    t->pre->next = t->next;
                if(t->next != NULL)
                    t->next->pre = t->pre;
                free(t);
                break;
            }
            t = t->next;
        }
    }
    LNode *t = llist->next;
    while(t != NULL)
    {
        cout << t->data << " ";
        t = t->next;
    }
    return 0;
}

2022/10/16 02:11
加载中...