单链表交换函数(int,int)
Singly Linked List swap function (int, int)
我认为我的问题在于 push_backs() 的使用,但我想不出解决这个问题的简单方法。我需要它来交换参数中给出的两个整数处的节点,感谢任何帮助!我是一名大学新生,在当今世界崭露头角,我愿意接受反馈!
void MyList::swap(int i, int j)
{
if (i == j || i > size() || j > size()) return;
Node *temp = head;
delete head; //pretty sure this is what's giving me issues as well
for (unsigned x = 0; x < size(); x++)
{
if (x == i)
{
int y = 0;
for (Node *itt = head; itt; itt = itt->next)
{
if (y == j)
push_back(itt->value);
y++;
}
}
else if (x == j)
{
int y = 0;
for (Node *itt = head; itt; itt = itt->next)
{
if (y == i)
push_back(itt->value);
y++;
}
}
else
{
push_back(temp->value);
}
temp = temp->next;
}
}
作为参考,这里是 Node 类
using namespace std;
class Node
{
public:
char value;
Node *next;
Node(char value)
:value(value), next(0)
{}
};
您可以交换第 i 个和第 j 个节点的值。
void MyList::swap(int i, int j){
if(head == NULL) return;
// Get ith node
node* node_i = head;
int node_cnt = 0;
while(1){
if(node_cnt == i) break;
if(node_i == NULL) return;
node_i = node_i->next;
node_cnt++;
}
// Get jth node
node* node_j = head;
node_cnt = 0;
while(1){
if(node_cnt == j) break;
if(node_j == NULL) return;
node_j = node_j->next;
node_cnt++;
}
// Swap values of nodes
int temp = node_i->value;
node_i->value = node_j->value;
node_j->value = temp;
}
我认为有比你更好的方法。你真的不需要delete
任何东西。您只需要获取指向第 i 个节点前面的节点(如果有)的指针和第 j 个节点之前的节点(如果有)的指针。然后进行交换。
相关文章:
- 调用'begin(int [n])'没有匹配函数
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 如何在不返回 C++ 值的情况下退出 int 函数?
- 调用 Parse int 函数时编译 parse 整数程序时出现问题
- 如何将字符串返回到主INT函数
- 为什么要使用int函数而不是void
- int 函数C++可以返回类似 "NULL" 的东西?
- C++int函数.当零是有效的返回值时,我如何检测false
- int const函数(参数)、int函数(const参数)和int函数(parameters)const之间的区别是什
- 类无法从主C++访问 int 函数
- 无法从 int 函数返回结果
- 如何将'int'函数调用到'void'函数
- 强制字符串为int函数以消耗整个字符串
- Int函数参数不能正常工作
- 删除Mat int函数(opencv)
- 为什么float参数适合int函数参数