Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct node {
- int value;
- struct node *next;
- };
- struct node *start=NULL;
- struct node *sll_new_node() {
- struct node *new_node;
- new_node = (struct node*) malloc(sizeof(struct node));
- if(new_node == NULL) {
- printf("Out of Memory\n");
- exit(1);
- }
- return new_node;
- }
- void sll_insert_first(int value) {
- struct node *new_node;
- new_node = sll_new_node();
- new_node->value = value;
- new_node->next = start;
- start = new_node;
- }
- void sll_insert_last(int value) {
- struct node *new_node;
- new_node = sll_new_node(); // creates new node
- new_node->value = value; // sets the new node's value
- new_node->next = NULL; // sets the next node's value to NULL
- if(start == NULL) { // if no node to start
- start = new_node;
- } else {
- struct node *temp;
- temp = start; // set temp to start
- while(temp->next != NULL) { // loop until temp is at the last node
- temp = temp->next; // set temp to next until loop finishes
- }
- temp->next = new_node; // set the next node after temp (last) to the new_node
- }
- }
- void sll_insert_at(int position, int value) {
- if(start == NULL || position == 0) {
- sll_insert_first(value);
- } else {
- struct node *new_node;
- int i;
- new_node = sll_new_node();
- new_node->value = value;
- struct node *temp;
- temp = start;
- while(i != position-1) { // loop until i = position-1
- if(temp->next == NULL) { // if it reaches last node
- sll_insert_last(value);
- return;
- } else {
- temp = temp->next; // set temp to the next node until...
- i++;
- }
- }
- new_node->next = temp->next; //set the next node of new_node to the next node of temp
- temp->next = new_node; // set the next node of temp to the new node
- }
- }
- void sll_delete_first() {
- struct node *deleted_node;
- if(start == NULL) { // if no node to delete
- printf("No node to delete\n");
- } else {
- deleted_node = start; // set deleted_node to first node
- start = start->next; // set the next node to start
- free(deleted_node); // remove the first node
- }
- }
- void sll_delete_last() {
- if(start == NULL) { // if no node to delete
- printf("No node to delete\n");
- } else {
- if(start->next == NULL) { // if only one node
- sll_delete_first();
- } else {
- struct node *deleted_node;
- struct node *new_last_node;
- deleted_node = start; // set deleted_node to start
- while(deleted_node->next != NULL) {
- new_last_node = deleted_node; // set new_last_node to node before last
- deleted_node = deleted_node->next; // set deleted_node to last node
- }
- new_last_node->next = NULL; // set new_last_node to NULL (end of list)
- free(deleted_node); // remove deleted_node (last node)
- }
- }
- }
- void sll_delete_at(int position) {
- int i;
- if(start == NULL) { // if no node to delete
- printf("No node to delete\n");
- } else {
- if(start->next == NULL || position == 0) { // if only one node or position == 0
- sll_delete_first();
- } else {
- struct node *deleted_node;
- struct node *temp;
- deleted_node = start; // set deleted_node to start
- while(i != position) { // loop until i = position-1
- if(deleted_node->next == NULL) { // if it reaches last node
- sll_delete_last();
- return;
- } else {
- temp = deleted_node; // set temp to deleted_node
- deleted_node = deleted_node->next; // set deleted_node to the next node until...
- i++;
- }
- }
- temp->next = deleted_node->next; //set the next node of temp to the next node of deleted_node
- free(deleted_node);
- }
- }
- }
- void sll_delete_value(int value) {
- if(start == NULL) { // if no node to delete
- printf("No node to delete\n");
- } else {
- if(start->next == NULL) { // if only one node
- sll_delete_first();
- } else {
- struct node *temp;
- int i = 0;
- temp = start;
- while(temp != NULL) {
- if(temp->value == value) {
- sll_delete_at(i);
- return;
- } else {
- i++;
- temp = temp->next;
- }
- }
- printf("Value (%d) not found!\n", value);
- }
- }
- }
- void sll_print_list() {
- struct node *temp;
- temp = start;
- while(temp != NULL) {
- printf("%d ", temp->value);
- temp = temp->next;
- }
- printf("\n");
- }
- void sll_print_at(int position) {
- struct node *temp;
- int i;
- if(start == NULL) { // if no node to print
- printf("No node to print\n");
- } else {
- temp = start; // set temp to first
- while(i != position) { // loop until i = position
- if(temp->next == NULL) { // if it reaches last node
- printf("No existing node on that position!");
- exit(1);
- } else {
- temp = temp->next; // set temp to the next node
- i++;
- }
- }
- printf("Position (%d) value: %d \n", position, temp->value);
- }
- }
- void sll_count() {
- struct node *temp;
- int i = 0;
- temp = start;
- while(temp != NULL) {
- i++;
- temp = temp->next;
- }
- printf("\nCount of Linked Lists: %d", i);
- }
- int main(void) {
- printf("SLL_INSERT_FIRST(10): "); sll_insert_first(10);sll_print_list();
- printf("\nSLL_INSERT_FIRST(20): "); sll_insert_first(20);sll_print_list();
- printf("\nSLL_INSERT_FIRST(30): "); sll_insert_first(30);sll_print_list();
- printf("\nSLL_INSERT_FIRST(40): "); sll_insert_first(40);sll_print_list();
- printf("\nSLL_INSERT_LAST(50): "); sll_insert_last(50); sll_print_list();
- printf("\nSLL_DELETE_FIRST: "); sll_delete_first(); sll_print_list();
- printf("\nSLL_PRINT_AT(3): "); sll_print_at(3);
- printf("\nSLL_INSERT_AT(0, 31): "); sll_insert_at(0, 31); sll_print_list();
- printf("\nSLL_DELETE_AT(0): "); sll_delete_at(0); sll_print_list();
- printf("\nSLL_DELETE_VALUE(50): "); sll_delete_value(50); sll_print_list();
- printf("\nSLL_COUNT(): "); sll_count();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement