Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include "linkedlist.h"
- void init_node(node* newNode)
- {
- newNode->data = 0;
- newNode->next = NULL;
- }
- node* traverse(node* head, int index)
- {
- node* current = head;
- node* previous = NULL;
- int i;
- for(i = 0; i < index && current != NULL; i++)
- {
- previous = current;
- current = current->next;
- }
- if(i == index)
- return previous;
- else
- return NULL;
- }
- node* insert_node(node* head, int index, int value)
- {
- node* newNode = (node*)malloc(sizeof(node));
- init_node(newNode);
- newNode->data = value;
- if(index == 0) // Inserting at the beginning
- {
- if(head == NULL) // Means we have an empty list
- {
- /* For students to do */
- head = newNode;
- newNode->next = NULL;
- }
- else // Inserting at the beginning, non-empty list
- {
- /* For students to do */
- newNode->next = head;
- head = newNode;
- }
- }
- else // Inserting at middle or end
- {
- node* previous = traverse(head, index);
- if(previous == NULL) // Index is out of bounds, cannot insert_node
- {
- printf("Index %d is out of bounds.\n", index);
- }
- else // previous is at node before index
- {
- newNode->next = previous->next;
- previous->next = newNode;
- }
- }
- return head;
- }
- node* delete_node(node* head, int index)
- {
- node* tempdlt;
- node* previous = traverse(head, index);
- if(index == 0) // deleting the head node
- {
- if(head == NULL)
- {
- printf("Empty list, nothing to delete.\n");
- }
- else
- {
- tempdlt = head;
- head = head->next;
- free(tempdlt);
- }
- }
- else // delete in the middle or the end
- {
- /* for you to do */
- if(previous == NULL){
- printf("Error 404 not found, Enter correct index\n");
- }
- else{
- tempdlt = previous->next;
- previous->next = previous->next->next;
- free(tempdlt);
- }
- }
- return head;
- }
- void print_list(node* head)
- {
- node* current = head;
- /* for students to do */
- if(head == NULL){
- printf("Current doesn't exist: Error 404 not found\n");
- }
- else{
- while(current != NULL){
- printf("%d \n", current->data);
- current = current->next;
- }
- }
- }
- node* destroy_list(node* head)
- {
- node* previous;
- while(head != NULL)
- {
- previous = head;
- head = head->next;
- free(previous);
- }
- return head;
- }
- int return_data(node* head, int index)
- {
- node* previous = traverse(head, index);
- /* For students to do */
- return previous->next->data; // Zero is a place holder.
- // You need to replace it with something else.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement