weixin_43306709 2022-03-04 10:23 采纳率: 77.3%
浏览 38
已结题

接上一条问题,问题在上一条问题上面

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

```c++
#ifndef LIST_H
#define LIST_H
#include
using namespace std;

template
struct Node
{
T data;
Node *next;
};

template
class List
{
private:
Node *head;
int _size;

public:
List();
void createlist1(int n);
void createlist2(int n);
void insert(int i, int e);
void deletebyeindex(int i);
int find(T element);
void change(int j, T element);
Node* reverse();
void display();
};
//创建头节点,头节点指向一个空的链表
template
List::List()
{
head = new Node;
head->next = NULL;
_size = 0;
}
//使用头插入法来创建链表
template
void List::createlist1(int n)
{
Node *temp;
Node *p;
p = head;
cout << "请输入你想输入的数据" << endl;
for (int i = 0; i < n; i++)
{
temp = new Node;
cin >> temp->data;
temp->next = p->next;
p->next = temp;
}
}
//使用尾插法
template
void List::display()
{
Node *p;
p = head->next;
while (p)
{
cout << p->data << endl;
p = p->next;
_size++;
}
}
//使用头插法插入元素
template
void List::createlist2(int n)
{
Node *temp;
Node *p;
p = head;
cout << "请输入你想输入的元素: " << endl;
for (int i = 0; i < n; i++)
{
temp = new Node;
cin >> temp->data;
p->next = temp;
p = temp;
}
p->next = NULL;
}
template
void List::insert(int j, int e)
{
Node *p;
p = head;
int i = 0;
while (p && i < j - 1)
{
p = p->next;
i++;
}
if (!p || i > j - 1)
cout << "插入错误" << endl;
else
{
Node *s;
s = new Node;
s->data = e;
s->next = p->next;
p->next = s;
}
}
template
void List::deletebyeindex(int i)
{
Node *p;
p = head;
Node *deleteNode;
int j = 0;
while (p && j < i - 1)
{
p = p->next;
j++;
}
if (!p || j > i - 1)
cout << "删除错误" << endl;
else
{
deleteNode = p->next;
p->next = p->next->next;
}
delete deleteNode;
}
//查找某个元素
template
int List::find(T element)
{
Node *p;
p = head;
int j = 0;
while (p && j < 4)
{
if (p->data == element)
return j;
else
p = p->next;
j++;
}
return j;
}
//修改某一个元素
template
void List::change(int j, T element)
{
Node s;
s = head;
int i = 0;
while (s && i < j - 1)
{
s = s->next;
i++;
}
s->next->data = element;
}
//反转链表
template
Node
List::reverse()
{
Node *reverse = NULL;
Node *next;
for (int i = 0; i < _size; i++)
{
next = head->next;
head->next = reverse;
reverse = head;
head = next;
}
}
#endif

#include
#include "List.h"

using namespace std;

int main()
{
// List s1;
List s2;
// List s3;
// s1.createlist1(4);
s2.createlist2(4);
// s1.display();
// s2.insert(2,200);
// s2.deletebyeindex(1);
s2.display();
// s2.change(1,200);
// s2.reserve();
// s2.display();
s2.reverse();
s2.display();
// cout << s2.find(4) << endl;
return 0;
}```

运行结果及报错内容

输入1 2 3 4
返回1 2 3 4 1 2 3 4

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • orange4reg 2022-03-04 10:31
    关注

    首先你这个size问题就不对,肯定是create insert delete 之后就要马上更正的,你那边是display之后才更正,而且还是错的,你每次diplay每个都自增,已经重复了。create的时候直接等于n就行了,insert的时候+1,delete的时候-1,多好理解。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了