#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node* next;
} Node;
Node* createNode(int value){
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode -> data = value;
newNode -> next = NULL;
return newNode;
}
// Node ** head: Truyền vào địa chỉ của con trỏ
void insertAtBack(Node** head, int value){
Node* newNode = createNode(value);
// Nếu linked list ban đầu là rỗng, thì thêm trực tiếp
if(*head == NULL){
*head = newNode;
return;
}
// Duyệt đến node cuối của Linked lis
Node* current = *head;
while(current -> next != NULL){
current = current -> next;
}
current -> next = newNode;
return;
}
// **head: Địa chỉ của con trỏ head
void insertAtK(Node** head, int value, int k){
Node* newNode = createNode(value);
// Nếu k = 0, quay về thao tác thêm đầu
if(k == 0){
// Nếu danh sách liên kết hiện tại là rỗng
if(*head == NULL){
*head = newNode;
return;
}
else{
newNode -> next = *head;
*head = newNode;
return;
}
}
Node* current = *head;
int countNode = 0;
while(current -> next != NULL && countNode < k - 1){
current = current -> next;
countNode++;
}
// Nếu node hiện tại là node cuối (quay về thao tác thêm cuối)
if(current -> next == NULL){
current -> next = newNode;
}
else{ // Nếu node hiện tại là node giữa (thực hiện 2 lần gán)
newNode -> next = current -> next;
current -> next = newNode;
}
}
void printList(Node* head){
Node* current = head;
if(current == NULL){
return;
}
while(current != NULL){
printf("%d ", current
-> data
); current = current -> next;
}
}
int main() {
int q;
// Linked list
Node* head = NULL;
for(int i=1;i<=q;i++){
char command[30];
if(strcmp(command
, "INSERT") == 0){ int k, value;
scanf("%d %d",&k
,&value
); insertAtK(&head, value, k);
}
else if(strcmp(command
, "PUSH_BACK") == 0){ int value;
insertAtBack(&head, value);
}
else if(strcmp(command
, "PRINT") == 0){ printList(head);
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3QgTm9kZXsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUqIG5leHQ7Cn0gTm9kZTsKCk5vZGUqIGNyZWF0ZU5vZGUoaW50IHZhbHVlKXsKICAgIE5vZGUqIG5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CiAgICBuZXdOb2RlIC0+IGRhdGEgPSB2YWx1ZTsKICAgIG5ld05vZGUgLT4gbmV4dCA9IE5VTEw7CiAgICByZXR1cm4gbmV3Tm9kZTsKfQoKLy8gTm9kZSAqKiBoZWFkOiBUcnV54buBbiB2w6BvIMSR4buLYSBjaOG7iSBj4bunYSBjb24gdHLhu48Kdm9pZCBpbnNlcnRBdEJhY2soTm9kZSoqIGhlYWQsIGludCB2YWx1ZSl7CiAgICBOb2RlKiBuZXdOb2RlID0gY3JlYXRlTm9kZSh2YWx1ZSk7CiAgICAKICAgIC8vIE7hur91IGxpbmtlZCBsaXN0IGJhbiDEkeG6p3UgbMOgIHLhu5duZywgdGjDrCB0aMOqbSB0cuG7sWMgdGnhur9wCiAgICBpZigqaGVhZCA9PSBOVUxMKXsKICAgICAgICAqaGVhZCA9IG5ld05vZGU7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAvLyBEdXnhu4d0IMSR4bq/biBub2RlIGN14buRaSBj4bunYSBMaW5rZWQgbGlzCiAgICBOb2RlKiBjdXJyZW50ID0gKmhlYWQ7CiAgICB3aGlsZShjdXJyZW50IC0+IG5leHQgIT0gTlVMTCl7IAogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50IC0+IG5leHQ7CiAgICB9CiAgICAKICAgIGN1cnJlbnQgLT4gbmV4dCA9IG5ld05vZGU7CiAgICByZXR1cm47CiAgICAKfQoKLy8gKipoZWFkOiDEkOG7i2EgY2jhu4kgY+G7p2EgY29uIHRy4buPIGhlYWQKdm9pZCBpbnNlcnRBdEsoTm9kZSoqIGhlYWQsIGludCB2YWx1ZSwgaW50IGspewogICAgTm9kZSogbmV3Tm9kZSA9IGNyZWF0ZU5vZGUodmFsdWUpOwogICAgCiAgICAvLyBO4bq/dSBrID0gMCwgcXVheSB24buBIHRoYW8gdMOhYyB0aMOqbSDEkeG6p3UKICAgIGlmKGsgPT0gMCl7CiAgICAgICAgLy8gTuG6v3UgZGFuaCBzw6FjaCBsacOqbiBr4bq/dCBoaeG7h24gdOG6oWkgbMOgIHLhu5duZwogICAgICAgIGlmKCpoZWFkID09IE5VTEwpewogICAgICAgICAgICAqaGVhZCA9IG5ld05vZGU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgbmV3Tm9kZSAtPiBuZXh0ID0gKmhlYWQ7CiAgICAgICAgICAgICpoZWFkID0gbmV3Tm9kZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIAogICAgTm9kZSogY3VycmVudCA9ICpoZWFkOwogICAgaW50IGNvdW50Tm9kZSA9IDA7CiAgICB3aGlsZShjdXJyZW50IC0+IG5leHQgIT0gTlVMTCAmJiBjb3VudE5vZGUgPCBrIC0gMSl7CiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQgLT4gbmV4dDsKICAgICAgICBjb3VudE5vZGUrKzsKICAgIH0KICAgIAogICAgLy8gTuG6v3Ugbm9kZSBoaeG7h24gdOG6oWkgbMOgIG5vZGUgY3Xhu5FpIChxdWF5IHbhu4EgdGhhbyB0w6FjIHRow6ptIGN14buRaSkKICAgIGlmKGN1cnJlbnQgLT4gbmV4dCA9PSBOVUxMKXsKICAgICAgICBjdXJyZW50IC0+IG5leHQgPSBuZXdOb2RlOwogICAgfQogICAgZWxzZXsgLy8gTuG6v3Ugbm9kZSBoaeG7h24gdOG6oWkgbMOgIG5vZGUgZ2nhu69hICh0aOG7sWMgaGnhu4duIDIgbOG6p24gZ8OhbikKICAgICAgICBuZXdOb2RlIC0+IG5leHQgPSBjdXJyZW50IC0+IG5leHQ7CiAgICAgICAgY3VycmVudCAtPiBuZXh0ID0gbmV3Tm9kZTsKICAgIH0KICAgIAp9Cgp2b2lkIHByaW50TGlzdChOb2RlKiBoZWFkKXsKICAgIE5vZGUqIGN1cnJlbnQgPSBoZWFkOwogICAgaWYoY3VycmVudCA9PSBOVUxMKXsKICAgICAgICBwcmludGYoIkVNUFRZXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHdoaWxlKGN1cnJlbnQgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCIlZCAiLCBjdXJyZW50IC0+IGRhdGEpOwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50IC0+IG5leHQ7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCmludCBtYWluKCkgewogICAgaW50IHE7CiAgICBzY2FuZigiJWQiLCZxKTsKICAgIAogICAgLy8gTGlua2VkIGxpc3QKICAgIE5vZGUqIGhlYWQgPSBOVUxMOwogICAgCiAgICBmb3IoaW50IGk9MTtpPD1xO2krKyl7CiAgICAgICAgY2hhciBjb21tYW5kWzMwXTsKICAgICAgICBzY2FuZigiJXMiLCBjb21tYW5kKTsKICAgICAgICBpZihzdHJjbXAoY29tbWFuZCwgIklOU0VSVCIpID09IDApewogICAgICAgICAgICBpbnQgaywgdmFsdWU7CiAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsJmsgLCZ2YWx1ZSk7CiAgICAgICAgICAgIGluc2VydEF0SygmaGVhZCwgdmFsdWUsIGspOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKHN0cmNtcChjb21tYW5kLCAiUFVTSF9CQUNLIikgPT0gMCl7CiAgICAgICAgICAgIGludCB2YWx1ZTsKICAgICAgICAgICAgc2NhbmYoIiVkIiwmdmFsdWUpOwogICAgICAgICAgICBpbnNlcnRBdEJhY2soJmhlYWQsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihzdHJjbXAoY29tbWFuZCwgIlBSSU5UIikgPT0gMCl7CiAgICAgICAgICAgIHByaW50TGlzdChoZWFkKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=