C - 链表 - 以相反的方式链接


#include <stdio.h>
#include<stdlib.h>
typedef struct node {
    int data;
    int help;
    struct node* next;
} Node;
void print_list(Node* head);
void CreateList(Node** head , int data);
void reverse(Node** head_ref);

int main() {
    int i, c, a;
    Node* list = NULL;
    printf("How many numbers do you want? ");
    scanf("%d",&c);
    for (i = 1; i <= c; i++) {
        printf("Enter number %d: ", i);
        scanf("%d", &a);
        CreateList(&list, a);
    }
    printf("Given linked listn");
    print_list(list);
    reverse(&list);
    printf("nReversed Linked list n");
    print_list(list);
    return 0;
}
void print_list(Node* head) {
    while (head != NULL) {
        printf("%d -> ", head->data);
        head = head->next;
    }
    if (head == NULL)
        printf("NULL");
    return;
}
void CreateList(Node** head , int data) {
    Node *temp = (Node*) malloc(sizeof(Node));;
    temp->data = data;
    temp->next = *head;
    *head = temp;
}
void reverse(Node** head_ref) {
    Node* prev   = NULL;
    Node* current = *head_ref;
    Node* next;
    while (current != NULL) {
        next  = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    *head_ref = prev;
}

输入 : 1 2 3 4 5 6

  • 给定链表:6->5->4->3->2->1->NULL

  • 反向链表 : 1

  • ->2->3->4->5->6->NULL

我的想法是这样的:

  • 1->2->3->4->5->6->空 - 成为给定列表

  • 6->5->4->3->2->1->空 - 成为反向列表

我实际上非常努力,但找不到以正常方式创建列表的方法,有什么可能的解决方案吗?

你的 create_list(( 函数在链的开头插入新节点,向下推现有的其他节点。相反,您可以在链的末尾附加,例如:


void add_at_end(Node** head ,int data)
{
    Node *temp;
      // Find the end of the chain
    while (*head) { head = & (*head)->next ; }
    temp = malloc(sizeof *temp);
    temp->next = NULL;
    temp->data = data;
      // append
    *head = temp;
}

相关内容

  • 没有找到相关文章

最新更新