2012-04-26 122 views
1

IM使這個鏈接(上面的代碼),我需要的是,當信息(國家)是一樣的以前的信息鏈表只更新計數和信息不會存儲例如鏈表打印

如果有此輸入

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; 
} 
+2

對不起,你必須解釋你想要一點什麼更好;這對我沒有意義。 – trojanfoe 2012-04-26 10:38:13

+0

你得到的錯誤輸出是什麼? – huon 2012-04-26 10:38:31

+0

換句話說,我需要的是,當國家的信息與前一個存儲在鏈表中的信息相同時,只有計數會被更新。 – user1312254 2012-04-26 10:40:42

回答

0

當你看到有有有同一個國家,當前正在增加新節點的計數LL節點:

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

相反,你可以做的是增加了已經存在的數節點。在這種情況下,你會不會被插入新的節點,所以你需要釋放malloced節點,並從函數返回:

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

但我需要增加這個代碼的計數,當我添加到我的代碼計數是留給1 – user1312254 2012-04-26 10:43:50

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; 
} 
+0

但這裏發生了什麼? – user1312254 2012-04-26 11:01:07

+0

* startPtr = newNode;在說undefined – user1312254 2012-04-26 11:07:13

+0

我把代碼縮小到(幾乎)最小。還有進一步減少的可能性:你可以刪除curNode變量......也許我在變量名中做了一些錯字,我對CamelCase並不擅長。 – wildplasser 2012-04-26 11:08:40