2016-09-11 8 views
-2

リンクリストの並べ替えでマージソートを実行しようとしていますが、コードが機能しない理由を理解できませんでした。誰かが私のためにそれを指摘できないのですか?ありがとう!ヨーダにリンクリストのマージソートでエラーが発生しました

#include <stdio.h> 

    #include <stdlib.h> 

    #include <iostream> 

    using namespace std; 

    struct listnode { struct listnode * next; int key; }; 

    //function prototypes 

    void seperate(struct listnode * node, struct listnode ** front, struct listnode ** back); 

    struct listnode * merge(struct listnode * node_1, struct listnode * node_2); 

    //merge sorted seperated linked list 
    void mergeSort(struct listnode ** node) 
    { 
    struct listnode * head = * node; struct listnode * node_1; struct listnode * node_2; 

    if ((head == NULL) || (head->next == NULL)) { return; } 

    seperate(head, &node_1, &node_2); 
    mergeSort(&node_1); mergeSort(&node_2); 
    * node = merge(node_1, node_2); 

} 

//sort sepearted linked list 
struct listnode * merge(struct listnode * node_1, listnode * node_2) 
{ 
    struct listnode * return_result = NULL; 
    if (node_1 == NULL) { return (node_2); } 
    else if (node_2 = NULL) { return (node_1); } 

    if (node_1->key <= node_2->key) 
    { 
     return_result = node_1; return_result->next = merge(node_1->next, node_2); 
    } 
    else { return_result = node_2; return_result->next = merge(node_1, node_2->next); } 

    return return_result; 

} 

//function to seperate linked list 
void seperate(struct listnode * node, struct listnode ** front, struct listnode ** back) 
{ 
    struct listnode * fast; struct listnode * slow; 

    if (node == NULL || node->next == NULL) { *front = node; * back = NULL; } 

    else 
    { 
     slow = node; fast = node->next; 

     while (fast != NULL) 
     { 
      fast = fast->next; 
      if (fast != NULL) { slow = slow->next; fast = fast->next; } 
     } 

     * front = node; * back = slow->next; slow->next = NULL; 

    } 


}// merge sort of linked list completed 



//test functions to push and print the linked list 

void push(struct listnode ** head, int data) 
{ 
    struct listnode * added_node = (struct listnode *)malloc(sizeof(struct listnode)); 
    added_node->key = data; 
    added_node->next = (*head); 
    (*head) = added_node; 
} 

void printList(struct listnode * node) 
{ 
    while (node != NULL) 
    { 
     cout << node->key; 
     node = node->next; 
    } 

} 

int main() 
{ 
    struct listnode * node1 = NULL; 

    push(&node1, 3); push(&node1, 30); push(&node1, 23); push(&node1, 1); push(&node1, 0); push(&node1, 9); 
    mergeSort(&node1); 
    cout << endl; 
    printList(node1); 

    return 0; 
} 
+0

意志をご紹介、あなたは正確に何を意味するのですか? –

+0

セグメンテーションフォルトが発生しましたが、どこにあるのか分かりませんでした。 – user6820297

+0

*私のコンパイラは有用なエラーメッセージを表示しません。* - コンパイラの仕事は、あなたのプログラムが構文的に正しいことを保証することです。 *論理*エラーを見つける仕事は、あなたとあなたのデバッガ/デバッグセッションに任されます。 – PaulMcKenzie

答えて

1
if (node_1 == NULL) { return (node_2); } 
else if (node_2 = NULL) { return (node_1); } 
/// -----------^ this is an assignment here 

は、私はあなたが「コードは動作しません」と言う

if (NULL == node_1) { return (node_2); } 
else if (NULL=node_2) { return (node_1); } 
/// ---------^ still an assignment, 
// but try it out & C what the compiler has to say 
+0

nvm lol .....。私はそれを参照してください – user6820297

+0

おかげでみんな。私は私の愚かな間違いを考え出した。 – user6820297

+0

@ user6820297その答えを受け入れるように気をつけますか? –

関連する問題