如何使用双指针正确引用结构中的指针

时间:2017-04-28 15:39:06

标签: c pointers linked-list binary-search-tree double-pointer

我正在尝试创建一个链表,其中每个ListNode都包含一个二进制搜索树。以下是结构:

typedef struct TreeNode {
   int label;
   long count;
   struct TreeNode *left;
   struct TreeNode *right;
} TreeNode;

typedef struct ListNode {
   TreeNode *ptr;
   struct ListNode *next;
   struct ListNode *prev;
} ListNode;

我有一个名为addNode的函数,它根据TreeNode的labelcount值之间的比较按顺序添加ListNodes,但是我无法弄清楚如何正确地比较它们。

我一直收到错误:request for member ‘next’ in something not a structure or union 引用addNode中的第二个if语句:

void addNode(ListNode ** head, ListNode * new){

if(*head == NULL){
  *head = new;
  return;
}

if((*head -> next ->  ptr -> count) < (new -> ptr -> count)){
  addNode(&(*head -> next), new);
}

有人可以解释一下这种比较的正确方法吗?

1 个答案:

答案 0 :(得分:2)

->运算符的优先级高于一元*运算符。所以当你这样做时:

*head->next

你实际上在说:

*(head->next)

您需要添加一些括号:

if(((*head) -> next ->  ptr -> count) < (new -> ptr -> count)){
  addNode(&((*head) -> next), new);
}