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

时间:2014-11-01 19:33:45

标签: c linked-list nodes

您好我的结构如下

 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;

由于节点包含不同长度的数据,我不得不交换实际节点而不仅仅是数据,而且我不知道如何做到这一点。任何帮助,将不胜感激。

2 个答案:

答案 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);
}