How does indirection work in this code?

后端 未结 1 1183
梦如初夏
梦如初夏 2021-01-28 02:56

I was reading the answer to Merging two sorted linked list. The code:

#define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0)

Node* MergeLi         


        
相关标签:
1条回答
  • 2021-01-28 03:07

    pnext is a pointer to a pointer of Node and is meant to hold the address of the next field of the last node

    so the first line sets the pointer to the next node (either list or the previous node->next)

    the second line sets pnext to the next field of the current node

    the third line advances list1 after just dealing with the head of it using the just assigned pnext for a micro-optimization that avoids dereferencing list1 again

    you can also write it in terms of node->next:

    #define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0)
    
    Node* MergeLists(Node* list1, Node* list2) 
    {
      Node *list = NULL, *node ;
    
      if (list2 == NULL)
        return list1;
    
      if (list1->data > list2->data)
        SWAP_PTRS(list1, list2);
    
      node=list=list1;
    
      list1=list1->next;
    
      while (list1 != NULL)
      {
        if (list1->data > list2->data)
          SWAP_PTRS(list1, list2);
    
        node->next = list1;  
    
        node = list1->next; 
        list1 = list1->next;     
      }
    
      node->next = list2;
      return list;
    }
    
    0 讨论(0)
提交回复
热议问题