奇偶随机指针,链表

odd even random pointer, linked list

提问人:kalicharan nimmagadda 提问时间:11/26/2016 最后编辑:Codorkalicharan nimmagadda 更新时间:11/27/2016 访问量:85

问:

我需要修改SLL随机指针,使列表中的所有奇数都由随机指针连接,其顺序与它们在SLL中的顺序相同,偶数也相同。我的意思是。。。 我需要修改随机指针,使 List random 中的第一个奇数将 指向列表中的第二个奇数,依此类推。 我返回一个数组 [odd_count,even_count]。 这是我的代码...我收到 NullReferenceException。我无法找出指针在我的代码中未正确处理的位置......这是我的代码...

#include <stdlib.h>
#include <stdio.h>

struct oddevennode{
    int data;
    struct oddevennode * next;
    struct oddevennode * random;
};

int * oddeven_sll(struct oddevennode *head){
    if (head == NULL) return NULL;
    int final_array[2]; 
    int odd_count = 0; int even_count = 0; 
    oddevennode *front = head; oddevennode *front_odd = head; oddevennode *front_even = head; 
oddevennode *odd_pt_front = front_odd; oddevennode *odd_pt_rear = front_odd;
oddevennode *even_pt_front = front_even; oddevennode *even_pt_rear = front_even;
    while (front != NULL){
        if (front->data % 2 == 0) even_count++;
        else odd_count++;
        front = front->next;
    }
    final_array[0] = odd_count;
    final_array[1] = even_count;
    if (odd_count != 0 && even_count != 0){
       while (front_odd->next != NULL){
           if (front_odd->data % 2 == 0){
               front_odd = front_odd->next;
               odd_pt_front = odd_pt_front->next;
               odd_pt_rear = odd_pt_rear->next;
           }
           else if (front_odd->data % 2 == 1){
               odd_pt_rear = odd_pt_rear->next;
               while (odd_pt_rear->data % 2 == 0){
                   odd_pt_rear = odd_pt_rear->next;
                   if (odd_pt_rear->next == NULL) break;
               }
               odd_pt_front->random = odd_pt_rear;
               odd_pt_front = odd_pt_rear;
               front_odd = odd_pt_rear;
           }
           if (odd_pt_rear->next == NULL) break;
        }
        while (front_even->next != NULL){
           if (front_even->data % 2 == 1){
               front_even = front_even->next;
               even_pt_front = even_pt_front->next;
               even_pt_rear = even_pt_rear->next;
           }
           else if (front_even->data % 2 == 0){
               even_pt_rear = even_pt_rear->next;
               while (even_pt_rear->data % 2 == 1){
                   even_pt_rear = even_pt_rear->next;
                   if (even_pt_rear->next == NULL) break;
               }
               even_pt_front->random = even_pt_rear;
               even_pt_front = even_pt_rear;
               front_even = even_pt_rear;
           }
           if (even_pt_rear->next == NULL) break;
       }
    }
    return final_array;
}

请帮助我找到上述实现中的错误...... 例如:10->3->6->5->8->1->3

3->5->1->3 [奇数,如果遍历 3 的随机数] 10->6->8 [偶数,如果遍历 10 的随机数] 提前致谢

c list 指针 nullreferenceexception

评论

0赞 Bob Jarvis - Слава Україні 11/26/2016
请包含调用此代码的代码。谢谢。
0赞 John Coleman 11/26/2016
NullReferenceException建议你使用的是 Visual Studio。我没有在 Visual Studio 中调试的经验,但这个答案建议您可以配置 Visual Studio,以便它以这样一种方式中断该错误,以便您可以看到导致它的行: stackoverflow.com/a/4719165/4996248
0赞 kalicharan nimmagadda 11/27/2016
它帮了大忙。谢谢@JohnColeman
0赞 wildplasser 11/27/2016
两个可以简化你的代码。好多。pointers to pointer to oddeven node

答: 暂无答案