【问题标题】:C program to shift items in a stack built using a linked listC 程序在使用链表构建的堆栈中移动项目
【发布时间】:2016-11-27 18:48:50
【问题描述】:

我正在尝试滚动作为链表实现的堆栈的前 3 个元素。例如,如果堆栈是: 1 2 3 4 5 在被滚动之前。在滚动函数之后,它应该是:3 1 2 4 5。第三项进入堆栈顶部,其他所有内容在堆栈中向下移动一个位置。这是我一直在玩的滚动功能:

// roll function rolls the top 3 numbers on the stack
struct item *roll(struct item *top){
        struct item *cur = top;
        struct item *prev = NULL;
        int i = 0;
        // get cur and prev to point to proper positions in linked list
        for(i = 0; i < 3; i++){
                prev = cur;
                cur = cur->next;
        }
        // roll the linked list
        prev->next = cur->next;
        cur->next = top;
        top = cur;

        return top;
}

【问题讨论】:

  • 你的代码有什么问题?
  • 你忘了问问题。
  • 当我运行时它不能正常工作。结果是相同顺序的链表,但缺少最后一项。我想要一些关于我可能出错的地方的指示。
  • 弹出前三个元素。然后按第二个、第一个和第三个。
  • 您的数据结构是循环链表还是实际堆栈,其中底部元素具有.next==NULL

标签: c linked-list stack


【解决方案1】:

你的循环应该运行 n-1 次

struct item *roll(struct item *top){
    struct item *cur = top;
    struct item *prev = NULL;
    int i = 0;
    // get cur and prev to point to proper positions in linked list
    for(i = 0; i < 2; i++){
            prev = cur;
            cur = cur->next;
    }
    // roll the linked list
    prev->next = cur->next;
    cur->next = top;
    top = cur;

    return top;
}
void print()
{
struct item *temp = roll(top);
  while(temp!=NULL)
  {
    cout<<temp->value;
    temp=temp->next;
  }
}

输出

31245

【讨论】:

  • 不知道为什么,但是有了这个更改,我的代码仍然出现与以前相同的问题
  • 您在创建或打印时出错。上传您的整个代码。
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2019-12-29
  • 2016-09-28
  • 2012-05-24
相关资源
最近更新 更多