c-交换两个相邻节点的奇异链表



Hi我有一个如下的结构

 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;

由于节点包含不同长度的数据,我必须交换实际节点,而不仅仅是数据,我一直在思考如何做到这一点。如有任何帮助,我们将不胜感激。

如果您已经解析了链表,那么交换节点的方法是同时考虑链接到您的两个候选者的先前节点。但是,如果它是列表中的第一项,就不会有前一个节点,而且它可能会变得复杂。所以交换数据指针。在您的示例中,节点结构只包含一个字符串指针。所以交换字符串指针。如果实际节点结构中有大量数据,请复制next指针,交换结构并替换下一个指针。

char *tempp = n1->item;
n1->item = n2->item;
n2->item = tempp;
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);
}

相关内容

  • 没有找到相关文章

最新更新