gpt4 book ai didi

c - 将链表的头与其中的链接交换?

转载 作者:行者123 更新时间:2023-11-30 19:29:58 25 4
gpt4 key购买 nike

为了澄清标题:我正在像 *head=(*head)->next 这样遍历链表,因为它是一个函数。在我的函数中,我选择我的当前head以及当前head当前head之间的另一个链接交换列表。

我想要的是创建一个函数,在知道交换的所有条件都满足的情况下,交换头和链接(不仅仅是数据);意味着链接不是当前的 head 或链接不是 NULL。可以这样做还是我必须尝试其他方法?

提前致谢。

既然我的问题不清楚,我就把问题给你。

我需要创建一个这样的函数:

void intertwine(cvor **head)

我收到一个带有随机数的链接列表。我需要做的是交换链接,直到它看起来像这样:奇数、偶数、奇数、偶数等。

我必须尊重不均匀和均匀的顺序。

如果偶数和不均匀数不相等,则按照它们在列表中的顺序保留它们。

这里有 2 个例子:

输入:11, 7, 5, 16, 12, 15, 17, 13, 10, 4, 1

输出:11, 16, 7, 12, 5, 10, 15, 4, 17, 13, 1

输入:1、3、2、4

输出:1、2、3、4

我当前的代码如下所示(未完成)

edit2:抱歉忘记了语言障碍

typedef struct atom{
int el;
struct atom *next;
} cvor;

void intertwine (cvor **head){
cvor *pom,int br=1;

pom=*head;
while(*head){
if((*head)->el%2==(br%2)){
pom=(*head)->next;
while(pom){
if(pom->el%2==(br+1)%2)break;
pom=pom->next;
}
if(pom==NULL) return;

最后是我想要的交换发生的时候。

最佳答案

如果您编写一个函数,可以将链表中的一个元素移动到同一链表中的另一个元素前面,则可以解决此问题。

函数应采用的输入

  • 指向head指针的指针

  • 指向要移动的元素的指针 b

  • 指向 b 应移到其前面的元素的指针

喜欢

void move_b_in_front_of_a(cvor **head, cvor* b, cvor* a) { ... }

调用函数时要求

  • ab都指向列表中的元素*head

  • a 位于列表中 b 之前

实现可能是这样的:

void move_b_in_front_of_a(cvor **head, cvor* a, cvor* b)
{
// Find the element just before a
cvor* a_prev = find_element_before(head, a);

// Find the element just before b (start from a)
cvor* b_prev = find_element_before(a, b);
if (b_prev == NULL) { .... add error handling ....}

// Take b out of the list
b_prev->next = b->next;

// Insert b in front of a
if (a_prev == NULL)
{
(*head) = b;
}
else
{
a_prev->next = b;
}
b->next = a;
}

在上面的代码中我使用了该函数

cvor* find_element_before(cvor* l, cvor* e)
{
// Add code to find the element just before e in the list l
// Return NULL if e is first element
// Add error handling if element e isn't found

...
...

return pointer_to_element_just_before_e;
}

您需要实现。

当您拥有这两个函数时,实现 intertwin 函数应该非常容易。

以下是该函数的一些伪代码,可以帮助您入门:

current_element = *head
expected-type = odd
loop:
if current_element is expected-type
toggle expected-type
current_element = next
if current_element is NULL return
else
find_element with_correct_type
if no element found return
move found_element in front of current_element (use above function)
current_element = found_element

关于c - 将链表的头与其中的链接交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964851/

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