#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct node
{
int data;
struct Node *next;
}Node;
Node *create_node(int data)
{
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
Node*create_list(int num)
{
Node *head = create_node(1);
Node *tmp = head;
for(int i = 0 ; i < num; i++)
{
Node *node = create_node(i);
tmp->next = node;
tmp = node;
}
return head;
}
int list_len(Node *head)
{
int len = 0;
while(head != NULL)
{
head = head->next;
len++;
}
return len;
}
Node *list_insert(Node *head, int index, int data)
{
if(index > list_len(head) || index <0)
{
return head;
}
else if(index == 0)
{
Node *node = create_node(data);
node->next = head;
head = node;
}
else
{
Node *tmp = head;
for(int i = 0;i < index - 1; i++)
{
tmp = tmp->next;
}
Node*node = create_node(data);
node->next = tmp->next;
tmp->next = node;
}
return head;
}
Node *list_delete(Node *head, int index)
{
if(head == NULL || index >= list_len(head) || index < 0)
{
return head;
}
else if(index == 0)
{
Node *tmp = head;
head = head->next;
free(tmp);
tmp = NULL;
}
else
{
Node *node = head;
for(int i = 0; i < index - 1; i++)
{
node = node->next;
}
Node *tmp = node->next;
node->next = tmp->next;
free(tmp);
tmp = NULL;
}
return head;
}
Node* list_find(Node *node, int data)
{
if(head == NULL)
{
return NULL;
}
Node *node = head;
while(node)
{
if(node->data== data)
{
return node;
}
node = node->next;
}
return NULL;
}
bool modify_index(Node *head, int index, int data)
{
if(head == NULL || index < 0)
{
return false;
}
Node *node = head;
for(int i = 0; i < index; ++i)
{
if(node == NULL)
{
return false;
}
node = node->next;
}
node->data = data;
return true;
}
bool modify_data(Node *head, int data, int val)
{
Node *node = list_find(head, data);
if(node)
{
node->data = val;
return true;
}
return false;
}