I have come very close to completing this Linked List assignment for school but am struggling with the very last function. The purpose of this function is to take the numbers that have been read in from a text file and place them into the linked list in numerical order. I tried to make it to where it traverses through the list and the node gets added whenever the value is greater than the previous number but have reached a segmentation fault. I've been stuck on this for an embarrassingly long amount of time and would appreciate anyone's help. Below are the files I am working with and the horrible mess of a function named insertStrategic that is supposed to get the list in numerical order.
MAIN
#include "linkedlist.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main (){
NodePtr newNode = NULL;
// after you implemented your functions in .cpp file
// - use the code below for testing your linked list.
// Demonstrate that ALL functions are working correctly.
// After that add code for reading data from input file.
// Every time you read an integer, create a node and insert it
// in the ascending order into the list.
int num;
FILE *fptr;
// make sure file exists, give message and exit otherwise
if ((fptr = fopen("input.txt","r")) == NULL){
printf("Error! opening file");
exit(1);
}
// while we still have items to read
while( fscanf(fptr,"%d", &num) != EOF){
newNode = makeNewNode(num);
insertStrategic(newNode);
}
fclose(fptr); // close the file
// At the end print the entire list to show that your code
// functions correctly.
printList();
cout << "After DeleteFromFront: " << endl;
deleteFromFront();
printList();
NodePtr seven = makeNewNode(7);
insertAtEnd(seven);
cout <<"Inserting seven at END" << endl;
printList();
NodePtr eight = makeNewNode(8);
insertAtEnd(eight);
cout <<"Inserting eight at END" << endl;
printList();
cout << "After deleting eight: " << endl;
deleteFromEnd();
printList();
cout << "After deleting seven:" << endl;
deleteFromEnd();
printList();
return 0;
}
LINKED LIST FILE
#include "linkedlist.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
NodePtr head = NULL;
NodePtr tail = NULL;
bool isEmpty(){
return (head == NULL);
}
NodePtr makeNewNode(int number){
NodePtr newNode = (NodePtr) malloc(sizeof(Node));
if(newNode != NULL){
newNode->data = number;
newNode->next = NULL;
}
return newNode;
}
void insertAtFront(const NodePtr newPtr){
if (isEmpty()){
head = newPtr;
tail = newPtr;
}
else{ // not empty
newPtr->next = head;
head = newPtr;
}
}
void insertAtEnd(const NodePtr newPtr){
NodePtr end = head;
newPtr->next = NULL;
while (end->next != NULL){
end = end->next;
}
end->next = newPtr;
}
void insertStrategic(const NodePtr newPtr){
if (isEmpty()){
head = newPtr;
tail = newPtr;
}
else {
NodePtr traverse = head;
newPtr->next = NULL;
while ((traverse->next = NULL)){
while ((traverse->data < newPtr->data)){
traverse = traverse->next;
}
traverse = traverse->prev;
traverse->next = newPtr;
break;
}
}
}
void deleteFromFront( ){
NodePtr temp = head;
head = head->next;
}
void deleteFromEnd( ){
NodePtr temp = head;
NodePtr secTemp;
while(temp->next != NULL) {
secTemp = temp;
temp = temp->next;
}
free(secTemp->next);
secTemp->next = NULL;
}
void printList( ){
if (isEmpty()){
cout << "List is empty" << endl;
}
else {
NodePtr temp = head;
while (temp != NULL){
cout << " The data is: " << temp->data << endl;
temp = temp->next;
}
}
}
HEADER FILE
#ifndef MYLIST_H
#define MYLIST_H
#include <cstddef>
struct listNode {
int data;
struct listNode* prev;
struct listNode* next;
};
typedef struct listNode Node;
typedef Node* NodePtr;
static int nodeCount = 0;
bool isEmpty();
NodePtr makeNewNode(int);
void insertAtFront(const NodePtr);
void insertAtEnd(const NodePtr);
void insertStrategic(const NodePtr);
void deleteFromFront( );
void deleteFromEnd( );
void printList();
#endif
TEXT FILE TO READ IN
3
5
11
2
7
1
65
12
3
45
6