【问题标题】:linked list printing链表打印
【发布时间】:2012-04-26 10:32:54
【问题描述】:

我正在制作这个链接(上面的代码),我需要当信息(国家)与以前的信息相同时,链接列表只更新计数并且信息不存储示例

如果有这个输入

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

【问题讨论】:

  • 对不起,你得把你想要的解释清楚一点;这对我来说没有意义。
  • 你得到的错误输出是什么?
  • 换句话说,我需要当国家信息与链表中存储的前一个相同时,只更新计数。
  • 如果输入是aaa, bbb, aaa, ccc, ddd, ddd,那么输出应该是什么?
  • aaa 2, bbb 1, ccc1, ddd2

标签: c list linked-list


【解决方案1】:

当您看到有一个具有相同国家/地区的 LL 节点时,您当前正在增加新节点的计数:

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

相反,您可以做的是增加已经存在的节点的计数。同样在这种情况下,您不会插入新节点,因此您需要释放 malloced 节点并从函数返回:

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

【讨论】:

  • 但是当我添加到我的代码中时,我需要使用此代码增加计数,计数保留为 1
【解决方案2】:
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;
}

【讨论】:

  • *startPtr=newNode;是说未定义
  • 我将代码减少到(几乎)最少。仍然有进一步减少的可能性:您可以删除 curNode 变量...也许我在变量名称中打错了,我不太擅长 CamelCase。
猜你喜欢
  • 2012-08-15
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2016-06-15
  • 2012-10-25
  • 1970-01-01
相关资源
最近更新 更多