单链表交换函数(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;
}
}
供参考,这里是节点class
using namespace std;
class Node
{
public:
char value;
Node *next;
Node(char value)
:value(value), next(0)
{}
};
我认为有比您更好的方法。您真的不需要 delete
任何东西。您只需要获取指向第 i 个节点(如果有)之前的节点的指针和指向第 j 个节点(如果有)之前的节点的指针。然后进行交换。
你可以交换第 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;
}
我认为我的问题在于 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;
}
}
供参考,这里是节点class
using namespace std;
class Node
{
public:
char value;
Node *next;
Node(char value)
:value(value), next(0)
{}
};
我认为有比您更好的方法。您真的不需要 delete
任何东西。您只需要获取指向第 i 个节点(如果有)之前的节点的指针和指向第 j 个节点(如果有)之前的节点的指针。然后进行交换。
你可以交换第 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;
}