I am writing a program to delete the nodes greater than x. I want to return the root node of the linked list after deleting. I save the new root node in variable "root". But unfortunately, when I get root in the main function, the value seems to be 0. Can anyone please help me identify the issue?**
// structure of a node
struct Node {
int data;
Node* next;
};
// function to get a new node
Node* getNode(int data)
{
Node* newNode = (Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// function to delete all the nodes from the list
// that are greater than the specified value x
Node *deleteGreaterNodes(Node* head_ref, int x)
{
Node *temp = head_ref, *prev;
static Node *root;
// If head node itself holds the value greater than 'x'
if (temp != NULL && temp->data > x) {
head_ref = temp->next; // Changed head
free(temp); // free old head
temp = head_ref; // Change temp
}
root = temp;
// Delete occurrences other than head
while (temp != NULL) {
// Search for the node to be deleted,
// keep track of the previous node as we
// need to change 'prev->next'
while (temp != NULL && temp->data <= x) {
prev = temp;
temp = temp->next;
}
// If required value node was not present
// in linked list
if (temp == NULL)
return 0;
// Unlink the node from linked list
prev->next = temp->next;
free (temp); // Free memory
// Update Temp for next iteration of
// outer loop
temp = prev->next;
}
return head_ref;
}
// function to a print a linked list
void printList(Node* head)
{
while (head) {
printf("%d ",head->data);
head = head->next;
}
}
// Driver program to test above
int main()
{
static Node *root;
// Create list: 7->3->4->8->5->1
Node* head = getNode(7);
head->next = getNode(3);
head->next->next = getNode(4);
head->next->next->next = getNode(8);
head->next->next->next->next = getNode(5);
head->next->next->next->next->next = getNode(1);
int x = 3;
printf("Original List: ");
printList(head);
root = deleteGreaterNodes(head, x);
printf("\nModified List: ");
printList(root);
return 0;
}
cout << "Original List: ";in a C program. Don't use a C++ compiler to compile a C program. Since the rest of the code does seem to be C rather than C++, you can simply edit that line out (there's an equivalentprintf()after it). But please be careful. - Jonathan Lefflerreturn 0. So the code that returns 0 is right there, in your code. - M Oehmcout. You definestruct Node; in C++ that also defines a typeNode, but it does not in C. You'd needtypedef struct Node Node;or equivalent before defining the structure type. You shouldn't usestatic Node *root;in either place where it is used. Inmain(), it should be a simple local (automatic) variable. IndeleteGreaterNodes(), it should be removed altogether. - Jonathan Leffler