リンクリストのノードは次のとおりです。
struct Node {
char data;
struct Node *next;
int pindex; //this is the first index position in parent[] which is null, next element goes here
int cindex; //this one for child array
char parent[50];
char child[50];
};
これが私が各ノードを作成する方法です。
struct Node *createNode(struct Node *node, char nodeData) {
if(root == NULL) {
int i=0;
node= malloc(sizeof(struct Node));
node->data = nodeData;
while(i<50) {
node->parent[i]= '\0';
node->child[i]= '\0';
i++;
}
node->pindex=0;
node->cindex=0;
node->next= malloc(sizeof(struct Node));
root=node;
return node;
}
else if (node->data == 0) {
int j=0;
node->data = nodeData;
while (j<50) {
node->parent[j]= '\0';
node->child[j]= '\0';
j++;
}
node->pindex=0;
node->cindex=0;
node->next= malloc(sizeof(struct Node));
return node;
}
else
return createNode(node->next, nodeData);
}
これが私のコードで、特定のノードの親配列と子配列の値を更新しています。
void insert(char a, char b) {
struct Node *pNode, *cNode;
if (hasNode(root,a)) //check if Node with node->data ='a' exists else create it
pNode= getNode(root,a);
else {
pNode= createNode(root,a);
//addToFirst(one); No need as we already have list of all elements
}
if (hasNode(root, b))
cNode= getNode(root,b);
else
cNode= createNode(root, b);
pNode->child[(pNode->cindex)] = b; //insert a char into child array of parent node
pNode->cindex++;
cNode->parent[(cNode->pindex)]= a; // insert char into child array of parent node
cNode->pindex++;
}
問題は次のセクションにあります
pNode->child[(pNode->cindex)] = b; //insert a char into child array of parent node
pNode->cindex++;
cNode->parent[(cNode->pindex)]= a; // insert char into child array of parent node
cNode->pindex++;
cNodeのparent[]に要素が挿入されると、その子[]はメモリから削除されます。そして、後で子供に何かを挿入すると、それは機能します。
以下は、このリンクリスト用に撮ったスクリーンショットです。子配列がデータルート->次のノードにありません