Idanref

Sum Of Linked Lists

Jun 13th, 2021
499
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #pragma warning (disable:4996)
  5.  
  6. typedef struct data_item
  7. {
  8.     int data;
  9.     struct data_item* next;
  10. } DataItem;
  11.  
  12. typedef struct ptr_item
  13. {
  14.     DataItem* ptr;
  15.     struct ptr_item* next;
  16. } PtrItem;
  17.  
  18. void insertToDataList(DataItem** head, int value)
  19. {
  20.     DataItem* new_node = (DataItem*)malloc(sizeof(DataItem));
  21.     assert(new_node);
  22.     new_node->data = value;
  23.     new_node->next = NULL;
  24.  
  25.     if (*head == NULL)
  26.     {
  27.         *head = new_node;
  28.         return;
  29.     }
  30.  
  31.     DataItem* temp = *head;
  32.  
  33.     while (temp->next != NULL)
  34.     {
  35.         temp = temp->next;
  36.     }
  37.  
  38.     temp->next = new_node;
  39. }
  40.  
  41. void InsertToPtrList(PtrItem** head, DataItem* item)
  42. {
  43.     PtrItem* newPtrNode = (PtrItem*)malloc(sizeof(PtrItem));
  44.     assert(newPtrNode);
  45.     newPtrNode->ptr = item;
  46.     newPtrNode->next = NULL;
  47.  
  48.     if (*head == NULL)
  49.     {
  50.         *head = newPtrNode;
  51.         return;
  52.     }
  53.  
  54.     PtrItem* temp = *head;
  55.  
  56.     while (temp->next != NULL)
  57.     {
  58.         temp = temp->next;
  59.     }
  60.  
  61.     temp->next = newPtrNode;
  62. }
  63.  
  64. void printList(DataItem* head)
  65. {
  66.     DataItem* temp = head;
  67.  
  68.     while (temp)
  69.     {
  70.         printf("%d > ", temp->data);
  71.         temp = temp->next;
  72.     }
  73.     printf("\n");
  74. }
  75.  
  76. void printPtrList(PtrItem* head)
  77. {
  78.     PtrItem* temp = head;
  79.  
  80.     while (temp)
  81.     {
  82.         printList(temp->ptr);
  83.         temp = temp->next;
  84.     }
  85.    
  86.     printf("\n");
  87. }
  88.  
  89. int getSum(DataItem* head)
  90. {
  91.     int sum = 0;
  92.  
  93.     DataItem* temp = head;
  94.  
  95.     while (temp)
  96.     {
  97.         sum += temp->data;
  98.         temp = temp->next;
  99.     }
  100.  
  101.     return sum;
  102. }
  103.  
  104. DataItem* newListOfSums(PtrItem* head)
  105. {
  106.     DataItem* newHead = NULL;
  107.  
  108.     PtrItem* temp = head;
  109.  
  110.     while (temp)
  111.     {
  112.         insertToDataList(&newHead, getSum(temp->ptr));
  113.         temp = temp->next;
  114.     }
  115.  
  116.     return newHead;
  117. }
  118.  
  119. void main()
  120. {
  121.     DataItem* head1 = NULL;
  122.     DataItem* head2 = NULL;
  123.     DataItem* head3 = NULL;
  124.     DataItem* head4 = NULL;
  125.  
  126.     PtrItem* ptrList1 = NULL;
  127.  
  128.     insertToDataList(&head1, 3);
  129.     insertToDataList(&head1, 2);
  130.     insertToDataList(&head1, 4);
  131.  
  132.     insertToDataList(&head2, 6);
  133.  
  134.     insertToDataList(&head4, 1);
  135.     insertToDataList(&head4, 7);
  136.  
  137.     InsertToPtrList(&ptrList1, head1);
  138.     InsertToPtrList(&ptrList1, head2);
  139.     InsertToPtrList(&ptrList1, head3);
  140.     InsertToPtrList(&ptrList1, head4);
  141.  
  142.     printPtrList(ptrList1);
  143.  
  144.     printf("\n\nNewHead: \n\n");
  145.  
  146.     DataItem* newHead = newListOfSums(ptrList1);
  147.  
  148.     printList(newHead);
  149. }
RAW Paste Data