這很明顯是一個鏈表的題目,考鏈表的基礎知識
開始先定義了一個結構體節點,里面有一個val和一個指向node結構體的指針next
然后通過typedf將linkedlist表示為一個指向node的指針
insert代表右插入
push是左插入
#include <iostream>
using namespace std;
typedef struct Node
{int val;Node *next;
} Node,*linkedList;
//后插
linkedList insert(Node *list, int x)
{Node *p = new Node;p->val = x;p->next = list->next;list->next = p;return p;
}
//前插 -->(先后插再換值,相當于后插,多了一步換值)
linkedList push(Node *list, int x)
{Node *p = new Node;p->val = list->val;list->val = x;p->next = list->next;list->next = p;return list;
}
//刪除
void remove(Node *list)
{Node *p = list->next;list->val = p->val;list->next = p->next;delete p;
}int main()
{int n, m, ma[100005] = {0}, k, p, x;linkedList list = new Node;list->next = NULL;linkedList *list1;list1 = new linkedList[100005];list1[1] = insert(list, 1);cin >> n;for (int i = 2; i <= n; i++){cin >> k >> p;if (p == 1) //前插{list1[i] = insert(list1[k], i);}else //后插{list1[i] = push(list1[k], i);list1[k] = list1[i]->next;}}
//刪除cin >> m;for (int i = 1; i <= m; i++){cin >> x;if (ma[x] == 1) //避免重復刪除continue;ma[x] = 1;remove(list1[x]);}//打印結果Node *L = list->next;while (L){cout << L->val << " ";L = L->next;}return 0;
}