修改后的代码如下:
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
};
// 初始化链表
ListNode* initList() {
return nullptr; // 初始为空链表
}
// 删除输入的第一个bh,如果没有找到则删除链表中的第一个元素
void assign(ListNode*& head, int bh) {
if (head == nullptr)
return;
if (head->val == bh) {
ListNode* temp = head;
head = head->next;
delete temp;
}
else {
ListNode* curr = head;
while (curr->next != nullptr && curr->next->val != bh) {
curr = curr->next;
}
if (curr->next != nullptr) {
ListNode* temp = curr->next;
curr->next = temp->next;
delete temp;
}
else {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
}
// 在链表末尾添加元素bh
void finish(ListNode*& head, int bh) {
ListNode* newNode = new ListNode();
newNode->val = bh;
newNode->next = nullptr;
if (head == nullptr)
head = newNode;
else {
ListNode* curr = head;
while (curr->next != nullptr)
curr = curr->next;
curr->next = newNode;
}
}
// 打印链表的元素
void print_list(const ListNode* head) {
if(head==nullptr){
cout<<"Empty List"<<endl; // 链表为空时输出 "Empty List"
return ;
}
const ListNode* curr = head;
while (curr->next != nullptr) {
cout << curr->val << "-";
curr = curr->next;
}
cout<<curr->val<<endl; // 输出最后一个元素的值,并换行
}
int main() {
ListNode* head = initList();
for (int i = 0; i < 10; i++) {
finish(head, 101 + i);
}
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string str;
int a;
cin >> str >> a;
if (str == "assign") {
assign(head, a);
}
else if (str == "finish") {
finish(head, a);
}
print_list(head);
}
return 0;
}
在原代码中,我们对print_list函数进行了修改,在输出链表元素时判断链表是否为空,如果为空则输出”Empty List”。此外,在打印最后一个元素时不再输出分隔符”-”,并在输出结束后换行。这样可以使得最终的结果在最后不出现”-“字符。
内容由零声教学AI助手提供,问题来源于学员提问




