澄清标题:我像*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
我当前的代码如下所示(未完成(
编辑2:抱歉忘记了语言障碍
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 应移动到前面的元素的指针 a
喜欢
void move_b_in_front_of_a(cvor **head, cvor* b, cvor* a) { ... }
当需要调用函数时
a
和b
都指向列表中的元素*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;
}
您需要实现的。
当你有这两个函数时,实现intertwine
函数应该很容易。
以下是该函数的一些伪代码,可能会帮助您入门:
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