#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node {
char* value;
struct Node* right_ptr;
struct Node* left_ptr;
};
// Create a new node
struct Node* createNode(const char* str) {
struct Node
* newNode
= (struct Node
*)malloc(sizeof(struct Node
)); if (!newNode) {
printf("Memory allocation failed\n"); }
if (!newNode->value) {
printf("Memory allocation failed\n"); }
newNode->left_ptr = NULL;
newNode->right_ptr = NULL;
return newNode;
}
// Append node to the end of the list
void append(struct Node** head, const char* str) {
struct Node* newNode = createNode(str);
if (*head == NULL) {
*head = newNode;
return;
}
struct Node* temp = *head;
while (temp->right_ptr != NULL) {
temp = temp->right_ptr;
}
temp->right_ptr = newNode;
newNode->left_ptr = temp;
}
// Print list forward
void printForward(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
temp = temp->right_ptr;
}
}
// Print list backward
void printBackward(struct Node* head) {
if (!head) return;
struct Node* temp = head;
while (temp->right_ptr != NULL) {
temp = temp->right_ptr;
}
while (temp != NULL) {
temp = temp->left_ptr;
}
}
// Free memory
void freeList(struct Node* head) {
struct Node* temp;
while (head != NULL) {
temp = head;
head = head->right_ptr;
}
}
int main() {
struct Node* head = NULL;
// 7 char* values
const char* data[7] = {
"Node1", "Node2", "Node3", "Node4",
"Node5", "Node6", "Node7"
};
for (int i = 0; i < 7; i++) {
append(&head, data[i]);
}
printForward(head);
printBackward(head);
freeList(head);
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnN0cnVjdCBOb2RlIHsKICAgIGNoYXIqIHZhbHVlOwogICAgc3RydWN0IE5vZGUqIHJpZ2h0X3B0cjsKICAgIHN0cnVjdCBOb2RlKiBsZWZ0X3B0cjsKfTsKCi8vIENyZWF0ZSBhIG5ldyBub2RlCnN0cnVjdCBOb2RlKiBjcmVhdGVOb2RlKGNvbnN0IGNoYXIqIHN0cikgewogICAgc3RydWN0IE5vZGUqIG5ld05vZGUgPSAoc3RydWN0IE5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IE5vZGUpKTsKICAgIGlmICghbmV3Tm9kZSkgewogICAgICAgIHByaW50ZigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIG5ld05vZGUtPnZhbHVlID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOwogICAgaWYgKCFuZXdOb2RlLT52YWx1ZSkgewogICAgICAgIHByaW50ZigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIHN0cmNweShuZXdOb2RlLT52YWx1ZSwgc3RyKTsKCiAgICBuZXdOb2RlLT5sZWZ0X3B0ciA9IE5VTEw7CiAgICBuZXdOb2RlLT5yaWdodF9wdHIgPSBOVUxMOwoKICAgIHJldHVybiBuZXdOb2RlOwp9CgovLyBBcHBlbmQgbm9kZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CnZvaWQgYXBwZW5kKHN0cnVjdCBOb2RlKiogaGVhZCwgY29uc3QgY2hhciogc3RyKSB7CiAgICBzdHJ1Y3QgTm9kZSogbmV3Tm9kZSA9IGNyZWF0ZU5vZGUoc3RyKTsKCiAgICBpZiAoKmhlYWQgPT0gTlVMTCkgewogICAgICAgICpoZWFkID0gbmV3Tm9kZTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3RydWN0IE5vZGUqIHRlbXAgPSAqaGVhZDsKICAgIHdoaWxlICh0ZW1wLT5yaWdodF9wdHIgIT0gTlVMTCkgewogICAgICAgIHRlbXAgPSB0ZW1wLT5yaWdodF9wdHI7CiAgICB9CgogICAgdGVtcC0+cmlnaHRfcHRyID0gbmV3Tm9kZTsKICAgIG5ld05vZGUtPmxlZnRfcHRyID0gdGVtcDsKfQoKLy8gUHJpbnQgbGlzdCBmb3J3YXJkCnZvaWQgcHJpbnRGb3J3YXJkKHN0cnVjdCBOb2RlKiBoZWFkKSB7CiAgICBzdHJ1Y3QgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICBwcmludGYoIkZvcndhcmQ6ICIpOwogICAgd2hpbGUgKHRlbXAgIT0gTlVMTCkgewogICAgICAgIHByaW50ZigiJXMgIiwgdGVtcC0+dmFsdWUpOwogICAgICAgIHRlbXAgPSB0ZW1wLT5yaWdodF9wdHI7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCi8vIFByaW50IGxpc3QgYmFja3dhcmQKdm9pZCBwcmludEJhY2t3YXJkKHN0cnVjdCBOb2RlKiBoZWFkKSB7CiAgICBpZiAoIWhlYWQpIHJldHVybjsKCiAgICBzdHJ1Y3QgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICB3aGlsZSAodGVtcC0+cmlnaHRfcHRyICE9IE5VTEwpIHsKICAgICAgICB0ZW1wID0gdGVtcC0+cmlnaHRfcHRyOwogICAgfQoKICAgIHByaW50ZigiQmFja3dhcmQ6ICIpOwogICAgd2hpbGUgKHRlbXAgIT0gTlVMTCkgewogICAgICAgIHByaW50ZigiJXMgIiwgdGVtcC0+dmFsdWUpOwogICAgICAgIHRlbXAgPSB0ZW1wLT5sZWZ0X3B0cjsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQoKLy8gRnJlZSBtZW1vcnkKdm9pZCBmcmVlTGlzdChzdHJ1Y3QgTm9kZSogaGVhZCkgewogICAgc3RydWN0IE5vZGUqIHRlbXA7CiAgICB3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CiAgICAgICAgdGVtcCA9IGhlYWQ7CiAgICAgICAgaGVhZCA9IGhlYWQtPnJpZ2h0X3B0cjsKICAgICAgICBmcmVlKHRlbXAtPnZhbHVlKTsKICAgICAgICBmcmVlKHRlbXApOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHN0cnVjdCBOb2RlKiBoZWFkID0gTlVMTDsKCiAgICAvLyA3IGNoYXIqIHZhbHVlcwogICAgY29uc3QgY2hhciogZGF0YVs3XSA9IHsKICAgICAgICAiTm9kZTEiLCAiTm9kZTIiLCAiTm9kZTMiLCAiTm9kZTQiLAogICAgICAgICJOb2RlNSIsICJOb2RlNiIsICJOb2RlNyIKICAgIH07CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA3OyBpKyspIHsKICAgICAgICBhcHBlbmQoJmhlYWQsIGRhdGFbaV0pOwogICAgfQoKICAgIHByaW50Rm9yd2FyZChoZWFkKTsKICAgIHByaW50QmFja3dhcmQoaGVhZCk7CgogICAgZnJlZUxpc3QoaGVhZCk7CgogICAgcmV0dXJuIDA7Cn0=