gpt4 book ai didi

c - C++ 链表中的成对交换

转载 作者:行者123 更新时间:2023-11-30 20:30:07 26 4
gpt4 key购买 nike

void pairWiseSwap(struct node *head)
{
// The task is to complete this method
if(!head || (head && head->next==NULL))
return;

if(head->next!=NULL)
{
int tmp = head->next->data;
head->next->data = head->data;
head->data = tmp;
pairWiseSwap(head->next->next);
}
}

成对交换元素。这段代码是如何工作的?递归调用是如何工作的?

最佳答案

正如函数名称所示,它会交换每对单元格中的数据(而不是单元格本身)。

<小时/>

一个单元格与下一个单元格的数据交换非常明显:

int tmp = head->next->data;
head->next->data = head->data;
head->data = tmp;
<小时/>

How back recursion call is working?

调用 pairWiseSwap(head->next->next); 绕过数据被交换的几个单元格,以便在下一个单元格上重做。

<小时/>

让我们看一个包含完整代码的示例:

#include <stdio.h>
#include <stdlib.h>

struct node {
struct node * next;
int data;
};

void pairWiseSwap(struct node *head)
{
// The task is to complete this method
if(!head || (head && head->next==NULL))
return;

if(head->next!=NULL)
{
int tmp = head->next->data;
head->next->data = head->data;
head->data = tmp;
pairWiseSwap(head->next->next);
}
}

struct node * mk(int d, struct node * nx)
{
struct node * n = malloc(sizeof(struct node));

if (n != NULL) {
n->data = d;
n->next = nx;
}

return n;
}

void pr(struct node * head)
{
while (head) {
printf("%d ", head->data);
head = head->next;
}
}

int main()
{
struct node * head = mk(0, mk(1, mk(2, mk(3, mk(4, mk(5, NULL))))));

printf("before : ");
pr(head);

pairWiseSwap(head);
printf("\nafter: ");
pr(head);
putchar('\n');

/* free resources */
while (head) {
struct node * n = head->next;

free(head);
head = n;
}
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra h.c
pi@raspberrypi:/tmp $ ./a.out
before : 0 1 2 3 4 5
after: 1 0 3 2 5 4
<小时/>

注意

if(!head || (head && head->next==NULL))
return;

可以只是

if ((head == NULL) || (head->next==NULL))
return;

因为如果 || 左侧部分 head 不为空,则再次检查右侧部分不为空是没有用的

<小时/>

如果递归是在 head->next 而不是 head->next->next 上完成的,则函数会进行某种旋转,结果为 1 2 3 4 5 0

关于c - C++ 链表中的成对交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com