C 反向链接列表的代码

C 反向链接列表的代码,c,data-structures,linked-list,C,Data Structures,Linked List,我已经为反转链表编写了代码。 如果我运行此代码,给定的链表将被打印,但不会反转 我认为反转功能有些错误 能找个人吗。。告诉我代码中的错误。 我用了三个指针 #include<stdio.h> #include<stdlib.h> struct node { int data; struct node* next; }; void reverse(struct node** headr) { struct node* current=*headr

我已经为反转链表编写了代码。 如果我运行此代码,给定的链表将被打印,但不会反转

我认为反转功能有些错误

能找个人吗。。告诉我代码中的错误。 我用了三个指针

#include<stdio.h>
#include<stdlib.h>

struct node {
    int data;
    struct node* next;
};

void reverse(struct node** headr) {
    struct node* current=*headr;
    struct node*temp=*headr;
    struct node* prev;
    struct node* next;

    while (current!=NULL) {
        prev=current;
        current=current->next;
        next=current;
        next->next=prev;
    }

    temp->next=NULL;
    *headr=current;
}

void push(struct node** headr, int new_data) {
    struct node* new_node = (struct node*) malloc(sizeof(struct node));

    new_node->data  = new_data;
    new_node->next = (*headr);    
    (*headr)    = new_node;
}

void print(struct node *head) {
    struct node *temp = head;
    while (temp != NULL) {
        printf("%d  ", temp->data);    
        temp = temp->next;  
    }
}

int main() {
    struct node* head = NULL;

     push(&head, 20);
     push(&head, 4);
     push(&head, 15); 
     push(&head, 85);      

     printf("Given linked list\n");
     print(head);    
     reverse(&head);                      
     printf("\nReversed Linked list \n");
     print(head);    
     getchar();
}
#包括
#包括
结构节点{
int数据;
结构节点*下一步;
};
无效反向(结构节点**头){
结构节点*当前=*头;
结构节点*temp=*headr;
结构节点*prev;
结构节点*下一步;
while(当前!=NULL){
prev=当前值;
当前=当前->下一步;
下一个=当前;
下一步->下一步=上一步;
}
temp->next=NULL;
*头=电流;
}
void push(结构节点**headr,int new_数据){
结构节点*新节点=(结构节点*)malloc(sizeof(结构节点));
新建_节点->数据=新建_数据;
新建节点->下一步=(*头);
(*头)=新的_节点;
}
无效打印(结构节点*头){
结构节点*温度=头部;
while(temp!=NULL){
printf(“%d”,临时->数据);
温度=温度->下一步;
}
}
int main(){
结构节点*head=NULL;
推压(和压头,20);
推压(和头部,4);
推压(和压头,15);
推压(头,85);
printf(“给定链接列表”);
打印头;
反向(头);
printf(“\n反向链表\n”);
打印头;
getchar();
}
这可能会帮助您:

void reverse(struct node** headr)
{
    struct node* current=*headr;
    struct node* prev = NULL;
    struct node* next;
    while(current!=NULL)
    {
        next=current->next;
        current->next = prev;
        prev = current;
        current = next;
    }

    *headr=prev;
}
您的主要客户:

int main()
{

    struct node* head = NULL;

    push(&head, 20);
    push(&head, 4);
    push(&head, 15);
    push(&head, 85);

    printf("Befor:\n");
    print(head);

    reverse(&head);

    printf("\nAfter:\n");
    print(head);

    getchar();
}
Befor:
85  15  4  20  
After:
20  4  15  85  
输出:

int main()
{

    struct node* head = NULL;

    push(&head, 20);
    push(&head, 4);
    push(&head, 15);
    push(&head, 85);

    printf("Befor:\n");
    print(head);

    reverse(&head);

    printf("\nAfter:\n");
    print(head);

    getchar();
}
Befor:
85  15  4  20  
After:
20  4  15  85  

程序输出可能重复?查看更多有关如何执行此操作的示例@A.Raza我没有问,如何使用两个指针执行此操作。我想知道我的错误你的方法很有效,和我在Geeksforgek上发现的一样。但我的代码中有什么错误?@BhartKumar你的反向while循环在第一个和第二个节点(data=85和15)之间跳跃,因此从未结束。单步执行调试器以查看此信息。如果你草拟了这两个循环(你的答案和这个答案),你就应该知道什么是错的。@ StAdvutr我回滚它,抱歉我发布了我的C++工作。course@BhartKumar现在检查它,我修复
循环问题