ZBLOG

修改该代码使得在打印最后一个元素时不再输出分隔符"-”,并在输出结束后换行。 #include using namespace std; struct Node { int data; Node* next; Node(int value) : data(value), next(nullptr) {} }; struct LinkedList { Node* head; int length; LinkedLi...

修改后的代码如下所示:

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;

    Node(int value) : data(value), next(nullptr) {}
};

struct LinkedList {
    Node* head;
    int length;

    LinkedList() : head(nullptr), length(0) {} // 构造函数,初始化头节点和长度为0

    void insert(int value) {
        Node* newNode = new Node(value);
        if (head == nullptr) {
            head = newNode; // 如果链表为空,则将新节点设置为头节点
        }
        else {
            Node* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next; // 找到链表尾部节点
            }
            temp->next = newNode; // 将新节点插入到尾部
        }
        length++;
    }

    void printList(bool lastElementWithoutDelimiter = false) { // 添加参数用于控制是否打印最后一个元素时输出分隔符
        Node* temp = head;
        while (temp != nullptr) {
            cout << temp->data;
            if (temp->next != nullptr) { // 判断是否为最后一个元素
                cout << "-";
            } else if(lastElementWithoutDelimiter){
                break;  // 如果是最后一个元素并且需要省略分隔符,直接跳出循环
            }
            temp = temp->next;
        }
        cout << endl;
    }
};

// 移动位置函数
int move(LinkedList& list, int& location, int m) {
    int a;
    cin >> a; // 输入要移动的步数
    location += a; // 更新位置
    if (location >= m) {
        location -= m; // 如果位置超过数组最大值m,则将位置减去m
    }

    Node* temp = list.head;

    if (location > 0) {
        for (int i = 0; i < location; ++i)
            temp = temp->next;// 遍历找到目标位置对应的节点	
    }

    if (temp->data == 0)
        return location; // 如果位置处的元素为0,则返回当前位置
    else {
        location += temp->data; // 否则,将位置更新为当前位置加上当前位置处的元素值
        return location;
    }
}

int main() {
    LinkedList list;
    LinkedList v1;
    LinkedList v2;
    int m, n;
    cin >> m; // 输入格子数量m
    for (int i = 0; i < m; i++) {
        int a;
        cin >> a;
        list.insert(a); // 将输入的值插入到链表中
    }

    cin >> n; // 输入回合数n
    int location_1 = 0;
    int location_2 = 0;

    for (int i = 0; i < n; i++) {
        location_1 = move(list, location_1, m);
        v1.insert(location_1);

        location_2 = move(list, location_2, m);
        v2.insert(location_2);
    }

  	v1.printList(true); // 在打印v1时不输出分隔符,最后一个元素之后换行
  	v2.printList(true); // 在打印v2时不输出分隔符,最后一个元素之后换行

    return 0;
}

修改的地方包括:

  1. LinkedListprintList 函数中添加了一个参数 lastElementWithoutDelimiter,用于控制是否打印最后一个元素时输出分隔符。默认情况下为 false。
  2. 在主函数中调用 v1.printList(true)v2.printList(true),以指定在打印最后一个元素时不输出分隔符,并且在最后一个元素之后换行。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9354

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?