Linked List
Jump to navigation
Jump to search
#include<stdio.h>
#include<stdlib.h>
struct Node {
int val;
Node* next;
};
Node* new_node(int val) {
Node* node = (Node*)malloc(sizeof(Node));
node->val = val;
node->next = NULL;
return node;
}
// ถ้าไม่เจอจะ return โหนดสุดท้าย
Node* find_parent(Node* node, int val) {
if(node == NULL)return NULL;
if(node->next == NULL)return node;
if(node->next->val == val)return node;
return find_parent(node->next, val);
}
Node* find(Node* node, int val) {
if(node == NULL)return NULL;
if(node->val == val)return node;
return find(node->next, val);
}
void insert(Node* root, int val) {
Node* node = new_node(val);
node->next = root->next;
root->next = node;
}
void insert_before(Node* root, int p_val, int val) {
Node* parent = find_parent(root, p_val);
if(parent == NULL)return;
insert(parent, val);
}
void delete_node(Node* node, int val) {
Node* parent = find_parent(node, val);
if(parent == NULL)return;
if(parent->next == NULL)return;
Node* tmp = parent->next;
parent->next = parent->next->next;
free(tmp);
}
void print_recursive(Node* node) {
if(node == NULL)return;
printf("%d ", node->val);
print_recursive(node->next);
}
void print_for(Node* node) {
for( ; node != NULL; node = node->next)
printf("%d ", node->val);
}
int main(int argc, char *argv[])
{
Node* root = new_node(0);
for(int i = 1; i <= 10; i++) {
insert(root, i);
print_recursive(root->next);
printf("\n");
}
printf("\n");
for(int i = 1; i <= 10; i += 4) {
delete_node(root, i);
print_for(root->next);
printf("\n");
}
printf("\n");
for(int i = 1; i <= 10; i += 3) {
insert_before(root, i, i * 2);
print_for(root->next);
printf("\n");
}
printf("\n");
getchar();
return 0;
}