任何人都可以解释为什么函数* kAltReverse返回节点类型prev以及当你在print函数中调用node-> next以从struct node&获取下一个元素时它将如何工作打印以及它如何指向下一个数据?
我不明白如何使用* kAltReverse函数中的prev来打印数据?
非常感谢帮助!!!
问题来源:GeeksforGeeks
#include<stdio.h>
#include<stdlib.h>
struct node {
int data;
struct node* next; };
struct node *kAltReverse(struct node *head, int k) {
struct node* current = head;
struct node* next;
struct node* prev = NULL;
int count = 0;
while (current != NULL && count < k)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
count++;
}
if(head != NULL)
head->next = current;
count = 0;
while(count < k-1 && current != NULL )
{
current = current->next;
count++;
}
if(current != NULL)
current->next = kAltReverse(current->next, k);
return prev;
}
void push(struct node** head_ref, int new_data) {
struct node* new_node =
(struct node*) malloc(sizeof(struct node));
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
void printList(struct node *node) {
int count = 0;
while(node != NULL)
{
printf("%d ", node->data);
node = node->next;
count++;
}
}
int main(void) {
struct node* head = NULL;
for(int i = 20; i > 0; i--)
push(&head, i);
printf("\n Given linked list \n");
printList(head);
head = kAltReverse(head, 3);
printf("\n Modified Linked list \n");
printList(head);
getchar();
return(0);
}
答案 0 :(得分:0)
int count = 0;
看起来有问题。
它应该是static int count = 0;
,否则它将不会按预期运行。
这颠倒了第一个&#39; k&#39;使用递归的链表的元素。它就像在循环的第一次迭代中,第一个元素将被放置在第K个位置,第二个元素被放置在第一个位置,并且在下一个迭代中,当k减少1时,它将放置第二个值(迭代后的当前第一个值)到第(k-1)个位置(当前迭代的最后位置)。这种情况一直持续到计数到达&#39; k。