#include <stdio.h>#include <stdlib.h>// A linked list nodestruct node{ int data; struct node *next;};/* Given a reference (pointer to pointer) to the head of a list and an int, inserts a new node on the front of the list. */void push(struct node** head_ref, int new_data){ struct node* new_node = (struct node*) malloc(sizeof(struct node)); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node;}/* Given a reference (pointer to pointer) to the head of a list and a position, deletes the node at the given position */void deleteNode(struct node **head_ref, int position){ // If linked list is empty if (*head_ref == NULL) return; // Store head node struct node* temp = *head_ref; // If head needs to be removed if (position == 0) { *head_ref = temp->next; // Change head free(temp); // free old head return; } // Find previous node of the node to be deleted for (int i=0; temp!=NULL && i<position-1; i++) temp = temp->next; // If position is more than number of ndoes if (temp == NULL || temp->next == NULL) return; // Node temp->next is the node to be deleted // Store pointer to the next of node to be deleted struct node *next = temp->next->next; // Unlink the node from linked list free(temp->next); // Free memory temp->next = next; // Unlink the deleted node from list}// This function prints contents of linked list starting from// the given nodevoid printList(struct node *node){ while (node != NULL) { printf(" %d ", node->data); node = node->next; }}/* Drier program to test above functions*/int main(){ /* Start with the empty list */ struct node* head = NULL; push(&head, 7); push(&head, 1); push(&head, 3); push(&head, 2); push(&head, 8); puts("Created Linked List: "); printList(head); deleteNode(&head, 4); puts("\nLinked List after Deletion at position 4: "); printList(head); return 0;} Output:
Created Linked List: 8 2 3 1 7 Linked List after Deletion at position 4: 8 2 3 1
No comments:
Post a Comment