I am having some trouble translating this java code in to C. There is something wrong with my merge sort in C. Don't know what since I get error at runtime.
Compiler: Dev-cpp 4.8.8.0
OS: Windows 2000 sp4
"Java"
This is what I have done in C.Code:public static IntNode MergeSort(IntNode list1) { if ((list1 == null) || (list1.getLink() == null) return list1; IntNode list2 = split(list1); list1 = MergeSort(list1); list2 = MergeSort(list2); return merge(list1, list2); } private static IntNode split(IntNode list1) { if ((list1 == null) || (list1.getLink() == null) return null; IntNode.list2 = list1.getLink(); list1.setLink(list2.getLink()); list2.setLink(split(list2.getLink())); return list2; } private static IntNode merge(IntNode list1, IntNode list2) { if (list1 == null) return list2; if (list2 == null) return list1; if (list1.getData() < list2.getData()) { list1.setLink(merge(list1.getLink(), list2)); return list1; } else { list2.setLink(merge(list1, list2.getLink())); return list2; } }
INTLINKEDLIST.H
Code:#ifndef _INTLINKEDLIST_H_ #define _INTLINKEDLIST_H_ struct Node { int element; struct Node * Next; }; void Insert(int x, struct Node * l); struct Node * MergeSort(struct Node * list1); struct Node * split(struct Node * list1); struct Node * merge(struct Node * list1, struct Node * list2); #endifCode:#include "IntLinkedList.h" #include <stdio.h> #include <stdlib.h> void insert(int X, struct Node * l) { struct Node * temp = malloc(sizeof(struct Node)); if (temp == NULL) fprintf(stderr, "Error in memory allocation.\n"); temp->element = X; temp->Next = l->Next; l->Next = temp; } struct Node * MergeSort(struct Node * list1) { struct Node * list2; if ((list1 == NULL) || (list1->Next == NULL)) return list1; list2 = split(list1); list1 = MergeSort(list1); list2 = MergeSort(list2); return merge(list1, list2); } struct Node * split(struct Node * list1) { struct Node * list2; if ((list1 == NULL) || (list2->Next == NULL)) return NULL; list2 = list1->Next; list1->Next = list2->Next; list2->Next = split(list2->Next); return list2; } struct Node * merge(struct Node * list1, struct Node * list2) { if (list1 == NULL) return list2; if (list2 == NULL) return list1; if (list1->element < list2->element) { list1->Next = merge(list1->Next, list2); return list1; } else { list2->Next = merge(list1, list2->Next); return list2; } }



LinkBack URL
About LinkBacks



