C 合并列表节点
如果给我们一个链表,那么我们必须进行操作,使偶数索引节点排列在一起,奇数索引节点排列在偶数索引节点之后 应输出以下链表C 合并列表节点,c,linked-list,nodes,C,Linked List,Nodes,如果给我们一个链表,那么我们必须进行操作,使偶数索引节点排列在一起,奇数索引节点排列在偶数索引节点之后 应输出以下链表1-->2-->3-->4-->5-->6: 2-->4-->6-->1-->3-->5 假设这是您的列表: typedef struct node { int val; struct node * next; } node_t; 首先,您需要为列表的标题指定一个指针,如下所示: node_t * head = NULL; he
1-->2-->3-->4-->5-->6
:
2-->4-->6-->1-->3-->5
假设这是您的列表:
typedef struct node {
int val;
struct node * next;
} node_t;
首先,您需要为列表的标题指定一个指针,如下所示:
node_t * head = NULL;
head = malloc(sizeof(node_t));
然后对
循环使用:
for(int i = 0; i<size_of_your_list; i= i+2){
if(i % 2 == 0){
printf("%d",head->val);
}
head = head->next;
}
for(int i =1 ; i<size_of_your_list; i=i+2){
if(i % 2 == 1){
printf("%d",head->val);
}
head = head->next;
}
for(int i=0;ival);
}
头部=头部->下一步;
}
对于(int i=1;ival);
}
头部=头部->下一步;
}
请注意,此代码仅打印。它不会更改您的列表。您正在查找代码吗?你能解释一下你所付出的努力吗?最简单的方法是将所有偶数编号的节点移到前面。您应该能够通过基本的链表操作来实现这一点。如果printf(“%d”,head->val)代码>不工作尝试:printf(“%p”,head->val)实际上,我们必须修改列表,而不是简单地打印它。此外,使用您的代码,我无法获得与节点相关的索引存储在哪里,我的意思是,正如我们所做的那样,I%2==1或I%2==0,那么我们如何知道I的哪个值用于该节点,或者我们在这里假设已经有一个与每个节点相关联的索引字段。谢谢提醒!稍微编辑了我的代码。您可以假设第一个节点对应于i=0
,第二个i=1
e.t.c。但我们通常必须修改列表,根据我们的逻辑,它将首先打印第一个节点,但我们必须首先显示第二个节点
node_t *cursor = input_list;
while(cursor) {
if(cursor->value % 2 == 0)
append(output_list, cursor->value)
cursor = cursor->next;
}
cursor = input_list;
while(cursor) {
if(cursor->value % 2 == 1)
append(output_list, cursor->value)
cursor = cursor->next;
}