1

これをリンクさせます(上記のコード)。情報(国)が前の情報と同じ場合、リンクされたリストはカウントのみを更新し、情報は保存されません例

この入力があれば

mmm 1
mmm 2
mmm 3

出力が必要になりますmmm3

これを実現するにはどうすればよいですか

void insertitem(ListNode **startPtr,booking_type* bookings){
    int ans=0;

    ListNode *prevNode =NULL ,*curNode=*startPtr;

    ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));

    strcpy(newNode->data, bookings->country); //newNode->data =bookings->country;
    newNode->nextPtr = NULL;
    newNode->count = 1;  
    while ((curNode!=NULL)&&(strcmp(curNode->data,bookings->country)<=0) ) // future : use strcmp 
    {
      if(strcmp(curNode->data,bookings->country)==0){
        newNode->count++;
      }

      prevNode=curNode;
      curNode = prevNode->nextPtr;
    }

    if(prevNode == NULL)
        *startPtr=newNode;
    else
        prevNode->nextPtr = newNode;

    newNode->nextPtr = curNode;
}
4

2 に答える 2

0

同じ国を持つ LL ノードがあることがわかった場合は、現在、新しいノードの数を増やしています。

if(strcmp(curNode->data,bookings->country)==0){
        newNode->count++;
}

代わりに、既存のノードの数を増やすことができます。また、この場合、新しいノードを挿入しないため、malloced ノードを解放して関数から戻る必要があります。

if(strcmp(curNode->data,bookings->country)==0){
        curNode->count++;
        free newNode;
        return;
}
于 2012-04-26T10:41:42.613 に答える
0
void insertitem(ListNode **startPtr,booking_type* bookings){
    int dif;
    ListNode *curNode. *newNode;


    for (dif = -1; (curNode= *startPtr); startPtr = &curNode->nextPtr ) {
      dif = strcmp(curNode->data,bookings->country);
      if (dif==0) {
          /* found it! we're almost done */
          curNode->count += 1;
          return; }
      if (dif > 0) break; 
    }
    /* when we get here, startPtr points to the pointer where we should
    ** insert our new node.
    ** *ptr becomes our tail, and ptr should point at the new node
    */
    newNode = malloc(sizeof *newNode);
        /* TODO: check for malloc() failure here ... */
    strcpy(newNode->data, bookings->country);
    newNode->nextPtr = *startPtr;
    newNode->count = 1;  
    *startPtr=newNode;
    return;
}
于 2012-04-26T10:57:34.977 に答える