链接列表K备用反向程序

时间:2017-06-06 14:47:46

标签: c pointers linked-list

任何人都可以解释为什么函数* 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); 
 }

1 个答案:

答案 0 :(得分:0)

int count = 0;看起来有问题。 它应该是static int count = 0;,否则它将不会按预期运行。

这颠倒了第一个&#39; k&#39;使用递归的链表的元素。它就像在循环的第一次迭代中,第一个元素将被放置在第K个位置,第二个元素被放置在第一个位置,并且在下一个迭代中,当k减少1时,它将放置第二个值(迭代后的当前第一个值)到第(k-1)个位置(当前迭代的最后位置)。这种情况一直持续到计数到达&#39; k。