您好我的结构如下
struct node{
struct node *next;
char *item;
};
我正在尝试编写一个函数交换两个相邻的项目(我将用它来遍历main中的链表)。
到目前为止我的功能:
void swap(struct node *n1, struct node *n2){
if(strcmp(a,b) > 0){
a->next = b->next;
b->next = a;
由于节点包含不同长度的数据,我不得不交换实际节点而不仅仅是数据,而且我不知道如何做到这一点。任何帮助,将不胜感激。
答案 0 :(得分:1)
如果您已经解析了链接列表,那么交换节点的方法也是考虑链接到两个候选者的先前节点。但如果它是列表中的第一个项目,则不会成为前一个节点,并且它可能会变得复杂。所以交换数据指针。在您的示例中,节点struct仅包含字符串指针。所以交换字符串指针。如果实际节点结构中存在大量数据,请复制next
指针,交换结构,并替换下一个指针。
char *tempp = n1->item;
n1->item = n2->item;
n2->item = tempp;
答案 1 :(得分:0)
void swap(struct node **n1, struct node **n2)
{
// Initialize previous and current pointers
struct node *node1 = *n1;
struct node *node2 = *n2;
struct node *temp;
temp = node2->next;
node2->next = node1;
node1->next = temp;
}
您还可以使用以下代码,以便不添加额外的节点:
void swap(struct node **n1, struct node **n2){
(*n1) = (int)(*n1)^(int)(*n2);
(*n2) = (int)(*n1)^(int)(*n2);
(*n1) = (int)(*n1)^(int)(*n2);
}