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